Вам нужен массив строк, а не одна строка. Вы действительно уверены, что хотите начать все значения в одну строку? Я бы ожидал, что 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
, связанные с ним, так как это позволяет вам установить кодировку символов вместо используя платформу по умолчанию.