与此问题相关的 Java 仅在我正在阅读的情况下写入已删除的文件。根据该评论,是的,Windows 阻止删除而 Unix 没有。并且在 unix 下从不抛出任何 IOException
该代码是穷人的tail -f
,我有一个Java线程监视目录中的每个日志文件。我当前的问题是如果文件被删除,我不处理它。我需要中止并开始一个新线程或其他东西。我什至没有意识到这是一个问题,因为下面的代码在 Unix 下没有抛出异常
编码
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
String line = null;
while (true) {
try {
line = br.readLine();
// will return null if no lines added
} catch (IOException e) {
e.printStackTrace();
}
if (line == null) {
// sleep if no new lines added to file
Thread.sleep(1000);
} else {
// line is not null, process line
}
}
明天我会尝试在睡觉前添加这个检查,也许就足够了
if (!f.exists()) {
// file gone, aborting this thread
return;
}
有人有其他想法吗?