【问题标题】:Java fileWriter is not writing all of my output to a fileJava fileWriter 没有将我的所有输出写入文件
【发布时间】:2014-11-26 03:17:06
【问题描述】:

我正在尝试编写一个快速的 java 程序来获取 csv 并在 SQL 中创建插入语句。我不需要所有的列,否则我会直接通过 csv 导入数据。当我实际写出文件时,我的特殊问题就出现了。作者应该向文件输出超过 200 行,但只输出 190 行左右。我正在使用 Eclipse,想知道 Eclipse 是否会在 IO 完成之前关闭程序,但我不确定如何检查。以下是执行写入的代码:

  FileWriter fw = new FileWriter("CountriesOut.csv");
  CSVWriter writer = new CSVWriter(fw);
  for (int i = 0; i < line.size(); i++) {
      fw.write("INSERT INTO Country (CountryID, CountryName, CountryLocation, SummerFirstAppearance, WinterFirstAppearance) VALUES (");
      writer.writeNext(line.get(i));
      fw.write(");\n");
  }

我正在使用 openCSV 来解析和 Eclipse 的 IDE。同样相关的是它在行的中间切断,所以我知道它不仅仅是在循环期间的某个点终止。

【问题讨论】:

    标签: java eclipse csv


    【解决方案1】:

    我正在使用 Eclipse,想知道 Eclipse 是否会在 IO 完成之前关闭程序

    没有。

    问题是您的应用程序在写入所有已缓冲的数据之前就退出了。 (这很可能是在一个单独的 JVM 到 Eclipse 中,而 Eclipse 没有参与。)

    在您的申请结束时,您应该致电fw.close()

    此外,建议在writeNext(...) 调用之后和以下fw.write(...) 之前使用writer.flush()CSVWriter 的 javadocs 没有说明它是否进行任何缓冲。如果是这样,则需要刷新才能使输出源的“交错”正确。

    【讨论】:

    • 其实你想做 writer.close();因为 CSVWriter 类也可能在缓冲。更好的是,使用 try-with-resources。
    • @MeBigFatGuy - 如果你在我建议的时候刷新writer,那么关闭它是不必要的。
    • 啊错过了fw.write的拖尾。
    猜你喜欢
    • 2015-08-24
    • 2017-04-29
    • 2012-07-08
    • 2011-03-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2016-01-30
    • 2015-10-06
    相关资源
    最近更新 更多