Java fileWriter 没有将我的所有输出写入文件
Posted
技术标签:
【中文标题】Java fileWriter 没有将我的所有输出写入文件【英文标题】:Java fileWriter is not writing all of my output to a file 【发布时间】: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。同样相关的是它在行的中间切断,所以我知道它不仅仅是在循环期间的某个点终止。
【问题讨论】:
【参考方案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的拖尾。以上是关于Java fileWriter 没有将我的所有输出写入文件的主要内容,如果未能解决你的问题,请参考以下文章
Java连载98-FileReader和FileWriter详解
Java FileWriter 类 - java.io.FileNotFoundException: * 没有这样的文件或目录 -Ubuntu