Java: назначить элемент массива String [] для String? - PullRequest
1 голос
/ 27 мая 2009

Я довольно новичок в этом, и это, вероятно, довольно очевидный ответ. В моем сценарии csv я пытаюсь выяснить, как читать файл csv с помощью класса CSVReader и записывать в новый файл csv. Ошибка говорит мне, что writeNext (java.lang.String []) нельзя применить к (java.lang.String). Я пытался использовать метод прямого назначения и getString (), однако ничего не работает. Есть идеи?

У меня есть следующий код: ОБНОВЛЕНО

public static void main(String[] args) throws IOException {
    //read csv file
    CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE));

    //write to csv file 
    CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t');

    String [] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        System.out.println("Name: [" + nextLine[0] + "]\nAddress: [" + nextLine[1] + "]\nEmail: [" + nextLine[2] + "]");
        String[] newRow = new String[] {nextLine[0],nextLine[2], nextLine[1]};
    }

    //writer2.writeNext(entries);
    writer2.writeAll(newRow);
    writer2.close();

}

Ошибка: c: \ java \ examples \ ETHImport.java: 46: не удается найти символы символ: переменная newRow Расположение: класс ETHImport writer2.writeAll (NewRow); * +1008 *

1 ошибка

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 28 мая 2009

Вам нужен массив строк, а не одна строка. Вы действительно уверены, что хотите начать все значения в одну строку? Я бы ожидал, что writeNext напишет одну строку на основе заданных вами строковых значений, с it , введя запятые и т. Д. В конце концов, это CsvWriter - оно должно быть запятой разделение.

Мне кажется, что метод writeAll, который вы уже используете, делает то, что вы хотите, и writeNext просто напишет одну строку ... что вы пытаетесь достичь, что writeAll не делает ' для тебя? Зачем вам нужно читать это построчно и в первую очередь строить entries? Разве вы не можете просто позвонить:

writer2.writeAll(allElements);

Я предполагаю, что это будет запись файла, разделенного на tab , хотя, учитывая, как создается writer2.

РЕДАКТИРОВАТЬ: Учитывая дополнительную информацию в комментариях, я подозреваю, что вы хотите:

  • Открыть CsvReader
  • Открыть CsvWriter (с соответствующими Writer и ; в качестве аргументов конструктора)
  • Зацикливает чтение строки за раз в виде массива строк (используя CsvReader.readNext()), создает новый массив строк для вывода и затем вызывает CsvWriter.writeNext(), чтобы записать этот массив строк в файл.
  • Закройте CsvReader и CsvWriter в блоках finally (поэтому они все равно закроются, если что-то пойдет не так)

Создание нового массива строк из существующего будет выглядеть примерно так (следуя вашему примеру):

String[] newRow = new String[] { oldRow[0], oldRow[2], oldRow[1] };

В основном это будут только первые три столбца, переключающиеся вокруг второго и третьего столбцов. Если вам нужны другие столбцы, просто измените их таким же образом.

Обратите внимание, что я не буду рекомендовать использовать FileWriter для записи в файл - используйте FileOutputStream и OutputStreamWriter, связанные с ним, так как это позволяет вам установить кодировку символов вместо используя платформу по умолчанию.

2 голосов
/ 28 мая 2009

Чтобы легко положить String в String[], используйте:

String[] entriesArr = new String[]{ entries };

или ярлык

String[] entriesArr = { entries };

Теперь entriesArr - это String[], содержащий один элемент, entries.

2 голосов
/ 28 мая 2009
String[] entries = new String[] { "entry1", "entry2"};

Ожидается массив записей, а не только одна строка. Если вы следуете этому примеру http://opencsv.sourceforge.net/, обратите внимание, что

String[] entries = "first#second#third".split("#");

вызов split в конце приводит к строке [].

для вашего кода:

public static void main(String[] args) throws IOException {
        //read csv file
        CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE));

        //write to csv file 
        CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t');

        String [] nextLine;
        while ((nextLine = reader.readNext()) != null) {
                writer2.writeNext( new String[] {nextLine[0],nextLine[2], nextLine[1]});
        }


        writer2.close();

}
0 голосов
/ 28 мая 2009

writer.writeNext (String []) ищет массив, который он затем запишет как «[0], [1], [2]»

Поскольку вы сохраняете весь CSV-файл как одну строку, вам необходимо разделить эту резервную копию строки. На самом деле вы должны вместо этого не объединять каждый элемент в одну строку, а хранить его как массив строк, представляющих каждую отдельную строку в файле CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...