2

我想逐行向文件写入内容。我有一个问题,这个过程需要很多时间并且有时会被取消。当前版本将内容写入文件末尾。是否可以逐行将其写入文件?

例如,如果我在第 4 行(共 400 行)之后退出,则文件当前为空。但我希望文件中已经有第 4 行。

这是我的代码:

String path = args[0];
String filename = args[1];

BufferedReader bufRdr = // this does not matter

BufferedWriter out = null;
FileWriter fstream;
try {
    fstream = new FileWriter(path + "Temp_" + filename);
    out = new BufferedWriter(fstream);
} catch (IOException e) {
    System.out.println(e.toString());
}

String line = null;

try {
    while ((line = bufRdr.readLine()) != null) {            
        // HERE I'm doing the writing with out.write
        out.write(...);
    }
} catch (IOException e) {
    System.out.println(e.toString());
}

try {
    out.close();
} catch (IOException e) {
    System.out.println(e.toString());
}
4

5 回答 5

5

当您想确保已写入写入器的数据进入文件时,请使用刷新功能

out.flush()
于 2013-05-08T08:28:24.900 回答
3

尝试out.flush()out.write(...)

于 2013-05-08T08:27:43.753 回答
2

out.flush()调用后使用out.write(...)

于 2013-05-08T08:33:33.603 回答
2

考虑到 java 文档FileWriter,您可以使用 FileWriter 直接将内容写入文件,而无需使用 BufferedWriter。

此外,正如所指出的,您需要在关闭缓冲区之前刷新数据。该函数write仅填充您的缓冲区,但不会写入磁盘上的文件。此操作是通过使用flushor来完成的close(将缓冲区的当前内容写入磁盘)。这两个函数的区别在于,flush让你写完之后close肯定会关闭流。

于 2013-05-08T08:40:44.333 回答
1

您写入缓冲区的数据通常不会真正写入,直到 out.flush() 或 out.close() 关闭。因此,根据您的要求,您应该使用 out.flush();

于 2013-05-14T07:42:15.990 回答