数据未使用 Apache Commons 写入 csv
data not being written to csv with Apache Commons
我正在尝试 运行 使用 apache commons 编写以下代码,以便将其写入 csv 文件。 finalResult
数组的打印语句显示其中包含我想要填充的内容。它只是出于某种原因没有将里面的数据发送到指定的csv。
public void handle(ActionEvent runButton) {
String csvFile = (userHomeFolder + "/" + fileName.getText() + ".csv");
FileWriter writer = new FileWriter(csvFile);
try {
final Object [] FILE_HEADER = columnHeaders.toArray();
int modval = 2;
final String NEW_LINE_SEPARATOR = "\n";
FileWriter fileWriter;
CSVPrinter csvFilePrinter;
CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR);
List rowResult = new ArrayList();
fileWriter = new FileWriter(fileName.getText());
csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);
try {
//CREATE CSV FILE HEADER
System.out.println("File header: " + FILE_HEADER);
csvFilePrinter.printRecord(FILE_HEADER);
for(int y = 0; y < finalResult.size(); y++) {
if(y % modval == 0) {
rowResult.add(finalResult.get(y));
csvFilePrinter.printRecord(rowResult);
System.out.println(rowResult);
rowResult.clear();
}else {
//this means it is not the last value in the row
rowResult.add(finalResult.get(y));
System.out.println("fr: " + finalResult.get(y));
}
}
} catch (Exception e) {
System.out.println("Error in csvFileWriter");
e.printStackTrace();
} finally {
try {
fileWriter.flush();
fileWriter.close();
csvFilePrinter.close();
} catch (IOException e ) {
System.out.println("Error while flushing/closing");
}
}
}
}
//below catches any errors for any of the above work
catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
为什么需要几十行代码和一个第三方库来完成 printf
大概 5 行就可以完成的事情?创建一个PrintWriter
并写入printf
。完成。
try (PrintWriter pw = new PrintWriter(csvFile)) {
pw.printf("%s\n", FILE_HEADER);
for(int i = 0; i < finalResult.size(); i+=2) { // no need to modulo
pw.printf("%s\n", finalResult.get(i)); // no idea what type finalResult.get(i) is, format it if you need to
}
}
您不应该通过硬编码文件分隔符 /
来创建 csvFile
,但这是另一个问题。
我正在尝试 运行 使用 apache commons 编写以下代码,以便将其写入 csv 文件。 finalResult
数组的打印语句显示其中包含我想要填充的内容。它只是出于某种原因没有将里面的数据发送到指定的csv。
public void handle(ActionEvent runButton) {
String csvFile = (userHomeFolder + "/" + fileName.getText() + ".csv");
FileWriter writer = new FileWriter(csvFile);
try {
final Object [] FILE_HEADER = columnHeaders.toArray();
int modval = 2;
final String NEW_LINE_SEPARATOR = "\n";
FileWriter fileWriter;
CSVPrinter csvFilePrinter;
CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR);
List rowResult = new ArrayList();
fileWriter = new FileWriter(fileName.getText());
csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);
try {
//CREATE CSV FILE HEADER
System.out.println("File header: " + FILE_HEADER);
csvFilePrinter.printRecord(FILE_HEADER);
for(int y = 0; y < finalResult.size(); y++) {
if(y % modval == 0) {
rowResult.add(finalResult.get(y));
csvFilePrinter.printRecord(rowResult);
System.out.println(rowResult);
rowResult.clear();
}else {
//this means it is not the last value in the row
rowResult.add(finalResult.get(y));
System.out.println("fr: " + finalResult.get(y));
}
}
} catch (Exception e) {
System.out.println("Error in csvFileWriter");
e.printStackTrace();
} finally {
try {
fileWriter.flush();
fileWriter.close();
csvFilePrinter.close();
} catch (IOException e ) {
System.out.println("Error while flushing/closing");
}
}
}
}
//below catches any errors for any of the above work
catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
为什么需要几十行代码和一个第三方库来完成 printf
大概 5 行就可以完成的事情?创建一个PrintWriter
并写入printf
。完成。
try (PrintWriter pw = new PrintWriter(csvFile)) {
pw.printf("%s\n", FILE_HEADER);
for(int i = 0; i < finalResult.size(); i+=2) { // no need to modulo
pw.printf("%s\n", finalResult.get(i)); // no idea what type finalResult.get(i) is, format it if you need to
}
}
您不应该通过硬编码文件分隔符 /
来创建 csvFile
,但这是另一个问题。