Java文件写入会突然停止?

7

这让我有些疯狂。我有以下代码,它可以读取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行停止了。我重新运行了56-76(现在是1-20),它在第18行停止了。这让我感到困惑...
2个回答

13

您可能需要在结束时关闭 FileWriter(为了保险起见也要刷新)。

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

4

也许你应该尝试刷新写入器?可以在结束时或每次写入后执行 - 通常是在结束时执行。

如果没有显式地刷新,你就依赖于运行时和操作系统在感觉到需要时刷新内容。另外,当你关闭输出流时,流也会被刷新,但在示例代码中你没有这样做...

请尝试:

writer.flush();

在完成任务时一定要关闭相关事项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接