Запись в строке нового CSV-файла (JAVA)
3598 просмотра
2 ответа
У меня есть следующий код:
public static void main(String[] args) throws IOException {
//File being read:
String fileName = "src/data/Belgium.csv";
String[] nextLine;
try (CSVReader reader = new CSVReader(new FileReader(fileName), ',', '"', 1)) {
while ((nextLine = reader.readNext()) != null) {
for (String line : nextLine) {
//NewFile
//When 2nd parameter - ture, it gets so big, that excel can't handle it anymore...
FileWriter writer = new FileWriter("src/dataNew/BelgiumNew1.csv", true);
line = line.replaceAll("T", " ");
line = line.replaceAll("Z", "");
line = line.replaceAll("ActualGenerationPerUnit.mean", "");
line = line.replaceAll("Plantname:", "");
//Escaping curly braces is a must!
line = line.replaceAll("\\{", "");
line = line.replaceAll("\\}", "");
writer.append(line);
writer.flush();
writer.close();
System.out.println(line);
}
}System.out.println("Successfully written");
}
}
Вывод кода в моей консоли с использованием System.out.println (строка) дает мне правильный вывод. Тем не менее, когда я открываю файл CSV, кажется, что он написан в обратном порядке. Excel сначала жалуется на количество строк. Тем не менее, только последний ряд моего исходного набора данных показывает. Набор данных (который предварительно неэффективно обработан) содержит более 1000 строк. Поэтому я не могу просто добавить каждую запись.
Есть ли лучший способ сделать это?
Советы и рекомендации приветствуются. Более того, я пробовал несколько авторов: - CSVwrite - BufferedWriter - FileWriter
Также проверил другие проблемы на Stackoverflow ... Не могу заставить его работать. Спасибо!
ОБНОВИТЬ:
На вопрос дан ответ! Финальный код:
public static void main(String[] args) throws IOException {
//File being read:
String fileName = "src/data/Belgium.csv";
//When 2nd parameter - ture, it gets so big, that excel can't handle it anymore...
FileWriter writer = new FileWriter("src/dataNew/BelgiumNew5.csv", true);
String[] nextLine;
try (CSVReader reader = new CSVReader(new FileReader(fileName), ',', '"', 1)) {
while ((nextLine = reader.readNext()) != null) {
for (String line : nextLine) {
line = line.replaceAll("T", " ");
line = line.replaceAll("Z", "");
line = line.replaceAll("ActualGenerationPerUnit.mean", "");
line = line.replaceAll("Plantname:", "");
//Escaping curly braces is a must!
line = line.replaceAll("\\{", "");
line = line.replaceAll("\\}", "");
writer.append(line);
writer.append(System.lineSeparator());
System.out.println(line);
}
}System.out.println("Successfully written");
}catch(Exception e){
e.printStackTrace();
}finally {
if (writer != null){
writer.flush();
writer.close();
}
}
}
Автор: lilienfa
Источник
Размещён: 12.11.2019 09:03
Ответы (2)
2 плюса
Тем не менее, когда я открываю файл CSV, кажется, что он написан в обратном порядке. Excel сначала жалуется на количество строк. Тем не менее, только последний ряд моего исходного набора данных показывает.
Я думаю, что это, вероятно, вызвано тем, что отсутствует символ новой строки между строками CSV.
На самом деле вы не пишете символ новой строки, когда пишете строку в файле. Вы можете написать это: writer.append(System.lineSeparator())
после каждой прочитанной строки.
Как примечания стороны:
1) Почему бы не переместить его перед циклом (иначе он менее эффективен):
FileWriter writer = new FileWriter("src/dataNew/BelgiumNew1.csv", true);
2) Не следует очищать и закрывать файл при каждой строке чтения, так как это менее эффективно:
writer.append(line);
writer.flush();
writer.close();
System.out.println(line);
Должно быть достаточно:
writer.append(line);
System.out.println(line);
Держите это:
writer.flush();
writer.close();
в finally
утверждении, таком как:
FileWriter writer = new FileWriter("src/dataNew/BelgiumNew1.csv", true);
try{
// all your operations to handle the file
}
catch(Exception e){
// your exception handling
}
finally{
if (writer!=null){
writer.flush();
writer.close();
}
}
РЕДАКТИРОВАТЬ, чтобы ответить на комментарий:
Если у вас сложилось впечатление, что выходной файл содержит несколько наборов записей, он, вероятно, связан с режимом добавления того, FileWriter
который вы использовали.
Заменить это:
FileWriter writer = new FileWriter("src/dataNew/BelgiumNew1.csv", true);
этим не использовать этот режим:
FileWriter writer = new FileWriter("src/dataNew/BelgiumNew1.csv", false);
Автор: davidxxx
Размещён: 19.12.2016 01:28
0 плюса
Я вижу, что вы используете opencsv для чтения вашего CSV-файла. В дополнение к правильному ответу от davidxxx вы могли бы просто написать свой код, если для записи в файл используете CSVWriter из opencsv. Ниже приведен пример:
import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
public class Example1 {
public static void main(String args[]) throws IOException {
String fileName = "src/data/Belgium.csv";
CSVReader reader = new CSVReader(new FileReader(fileName), ',','"',1);
List<String[]> lines = reader.readAll();
CSVWriter writer = new CSVWriter(new FileWriter("src/data/BelgiumNew1.csv",false), ',');
for(String[] row : lines){
for(int i = 0; i< row.length; i++){
row[i] = row[i].replaceAll("T", " ")
.replaceAll("Z", "z")
.replaceAll("ActualGenerationPerUnit.mean", "")
.replaceAll("Plantname:", "")
.replaceAll("\\{", "")
.replaceAll("\\}", "");
}
writer.writeNext(row);
}
writer.flush();
writer.close();
}
}
Автор: Eritrean
Размещён: 19.12.2016 02:54
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- csv CSV API для Java
- csv Остановить Excel от автоматического преобразования определенных текстовых значений в даты
- csv Как объединить текст из нескольких строк в одну текстовую строку на сервере SQL?
- csv Как вывести результаты запроса MySQL в формате CSV?
- csv Как экспортировать данные в формате CSV из SQL Server с помощью sqlcmd?
- filewriter Принудительная загрузка для блоба, созданного с помощью FileWriter в JavaScript
- filewriter запись массива строк вниз по столбцу файла CSV в Java
- filewriter Создайте новую строку в Java FileWriter
- filewriter писать CSV-файл построчно, используя строку в Java
- filewriter Запись данных в файл с помощью FIlewriter
- writer добавить новую строку в старый CSV-файл Python
- writer FileInputStream против FileReader
- writer Log4J: Как перенаправить OutputStream или Writer на запись (-ы) регистратора?
- writer Spring Batch: запись данных в несколько файлов с динамическим именем файла
- writer Нужно ли закрывать каждый вложенный OutputStream и Writer отдельно?