Java文件写作随机停止?

时间:2015-01-22 15:34:50

标签: java csv filewriter

这个让我发疯了。我有以下代码读取csv文件并将其重新格式化为复制粘贴准备好的Java数组格式:

  CSVReader reader = new CSVReader(new FileReader(fileName), ',' , '"' , 0);
   FileWriter writer = new FileWriter(outFile);
  //Read CSV line by line and use the string array as you want
  //Read all rows at once
  List<String[]> allRows = reader.readAll();

  //print table header
  //Read CSV line by line and use the string array as you want
 for(String[] row : allRows){
    System.out.println(Arrays.toString(row));
    writer.write("{");
    for(int lcv = 0;lcv<row.length;lcv++){
        if(lcv == row.length -1){
            writer.write(row[lcv]);
        }else{
            writer.write(row[lcv]+",");
        }
    }
    writer.write("},\n");
 }

如您所见,代码将文件中的记录打印到控制台,以及复制粘贴的文件。代码工作,没有错误等。但是,创建的文件在记录中途随机停止。我逐步完成代码并且写调用正在工作,而最奇怪的部分是控制台打印所有记录就好了,它应该镜像创建的文件。有没有人可以解释为什么文件没有完成但控制台是?

更多信息。初始文件是76行,大约36KB。我认为问题是内存限制已达到,因为它在第56行停止了76.我重新跑了56-76(现在是1-20)并且它停在第18行。这让我难过......

2 个答案:

答案 0 :(得分:11)

你可能需要在最后关闭FileWriter(并且为了好的措施而冲洗)。

for(...) {
   writer.write(row);
}
writer.flush();
writer.close();

答案 1 :(得分:3)

也许你应该尝试冲洗作家?你可以在最后或每次写作后完成 - 通常你最后都会这样做。

如果没有明确刷新,你会依赖运行时和操作系统在感觉好像是时候做这件事。或者,当您关闭在示例代码中没有执行的输出流时,流会被刷新...

尝试

writer.flush();

当你完成时,肯定会关闭事情。