我正在编写一个执行以下操作的java程序:
""
),如果2不成功,则将其写入新文件目前我有:
try (BufferedReader br = new BufferedReader(new FileReader(inputFile))) {
String line;
while ((line = br.readLine()) != null) {
try {
if (!do_stuff(line)){ //do_stuff returns bool based on success
write_non_success(line);
}
} catch (Exception e) {
e.printStackTrace(); //eat the exception for now, do something in the future
}
}
显然我不需要为此使用BufferedReader,因为它无法写入,但我应该使用哪个类?此外,阅读顺序并不重要
这与this question不同,因为我想删除所有行,而不是其他OP想要的任意行号,如果可能的话,我想避免在每一行之后写入临时文件,因为我的文件大约是100万行
答案 0 :(得分:4)
如果您根据所描述的算法执行所有操作,原始文件中保留的内容将与步骤3中“新文件”的内容相同:
很容易理解为什么在此过程结束时原始文件与“新文件”相同。您需要做的就是将算法执行到最后,然后复制新文件代替原始文件。
如果你担心这个过程会在中间发生崩溃,那么情况会变得非常不同:现在你必须在处理完每一行后写出原始文件的当前状态,而不是在你写完之前写下原文。确保它将处于一致的状态。您可以通过将所有行读入列表,从列表中删除第一行,将整个列表的内容写入临时文件,然后将其复制到原始位置来实现。显然,这是非常昂贵的,所以不应该在紧密循环中尝试。但是,这种方法可确保原始文件不会处于不一致状态,这在您希望避免多次执行相同工作时非常重要。