Java 未使用Apache Commons将数据写入csv

Java 未使用Apache Commons将数据写入csv,java,csv,javafx,apache-commons,Java,Csv,Javafx,Apache Commons,我试图用ApacheCommons运行以下代码,以便将其写入csv文件。finalResult数组的print语句显示它包含我想要填充的内容。由于某种原因,它不会将内部数据发送到指定的csv public void handle(ActionEvent runButton) { String csvFile = (userHomeFolder + "/" + fileName.getText() + ".csv"); FileWriter writer = new FileWri

我试图用ApacheCommons运行以下代码,以便将其写入csv文件。
finalResult
数组的print语句显示它包含我想要填充的内容。由于某种原因,它不会将内部数据发送到指定的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());
   }
公共无效句柄(ActionEvent runButton){
字符串csvFile=(userHomeFolder+“/”+fileName.getText()+“.csv”);
FileWriter writer=新的FileWriter(csvFile);
试一试{
final Object[]FILE_HEADER=columnHeaders.toArray();
int-modval=2;
最后一个字符串NEW_LINE_SEPARATOR=“\n”;
文件编写器文件编写器;
CSVPrinter CSVFile打印机;
CSVFormat csvFileFormat=CSVFormat.DEFAULT.withRecordSeparator(新的行分隔符);
List rowResult=新建ArrayList();
fileWriter=newfilewriter(fileName.getText());
csvFilePrinter=新的CSVPrinter(fileWriter,csvFileFormat);
试一试{
//创建CSV文件头
System.out.println(“文件头:“+文件头”);
打印记录(文件头);
对于(int y=0;y
为什么您需要几十行代码和一个第三方库来完成
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
    }
}
try(PrintWriter pw=新的PrintWriter(csvFile)){
printf(“%s\n”,文件头);
对于(inti=0;i

您不应该通过硬编码文件分隔符
/
来创建
csvFile
,但这是另一个问题。

您使用传统的
try
,而不使用
catch
finally
或资源声明,这就是它无法编译的原因!此外,最好在wirter使用底层编写器之后关闭它们,因为您不知道它们是否使用缓冲…您可以将finalResult的内容添加到问题中吗。另外,当您执行两个打印输出语句时,您会看到什么结果?为什么会有两个
FileWriter
s?似乎你只给其中一个写过信——哪个不是带有“csv”后缀的?@sillyfly csvFilePrinter使用FileWriter这里有一个名为
writer
FileWriter
,还有一个名为
FileWriter
。名为
writer
的代码在创建后从未使用过,它实际上是用.csv后缀初始化的。代码复杂的原因是它需要根据用户输入处理未知数量的列。然后,我希望它写入csv,并在每次索引达到列标题数组的大小时创建一个新行,以便它的格式整洁。我只是简化了代码,以便快速找到主要问题的解决方案。您可以在上面的代码中完成所有这些。您不需要知道列的数量,只需使用
附加您拥有的任何内容并打印即可。