Java 如何检测已从br.readline()循环中删除的文件
关于这个问题 只有在我的情况下,我才在阅读。根据这条评论,是的,Windows阻止删除,而Unix则不会。在unix下,从不抛出任何IOException 代码是穷人的Java 如何检测已从br.readline()循环中删除的文件,java,unix,io,bufferedreader,bufferedwriter,Java,Unix,Io,Bufferedreader,Bufferedwriter,关于这个问题 只有在我的情况下,我才在阅读。根据这条评论,是的,Windows阻止删除,而Unix则不会。在unix下,从不抛出任何IOException 代码是穷人的tail-f,其中我有一个java线程监视目录中的每个日志文件。我目前的问题是,如果文件被删除,我就不会处理它。我需要中止并启动一个新线程或其他东西。我甚至没有意识到这是一个问题,因为下面的代码在Unix下不会抛出异常 代码 BufferedReader br = new BufferedReader(new InputStrea
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;
}
有人有其他想法吗?您可以查看目录使用情况以进行更改并相应地采取行动您可以查看目录使用情况以进行更改并相应地采取行动当您到达文件结尾时,无论是否已删除,BufferedReader都应始终返回空值。这不是你应该检查的东西 你能给我们看一些代码吗?因为很难阻止BufferedReader不返回null 这个节目
public class Main {
public static void main(String... args) throws IOException {
PrintWriter pw = new PrintWriter("file.txt");
for (int i = 0; i < 1000; i++)
pw.println("Hello World");
pw.close();
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
br.readLine();
if (!new File("file.txt").delete())
throw new AssertionError("Could not delete file.");
while (br.readLine() != null) ;
br.close();
System.out.println("The end of file was reached.");
}
}
关于Linux打印
The end of file was reached.
当到达文件末尾时,无论是否已删除,BufferedReader都应始终返回null。这不是你应该检查的东西 你能给我们看一些代码吗?因为很难阻止BufferedReader不返回null 这个节目
public class Main {
public static void main(String... args) throws IOException {
PrintWriter pw = new PrintWriter("file.txt");
for (int i = 0; i < 1000; i++)
pw.println("Hello World");
pw.close();
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
br.readLine();
if (!new File("file.txt").delete())
throw new AssertionError("Could not delete file.");
while (br.readLine() != null) ;
br.close();
System.out.println("The end of file was reached.");
}
}
关于Linux打印
The end of file was reached.
有趣的新东西。新的1.7版本看起来很有趣。1.7版本的新增功能。一旦您读取了文件的结尾,就无法返回并重试。保持文件句柄打开的唯一方法是不读取文件的结尾。您可以通过在执行读取之前检查文件长度来完成此操作(这意味着您不能直接使用readLine),一旦您读取了文件的结尾,就不能返回并重试。保持文件句柄打开的唯一方法是不读取文件的结尾。您可以通过在执行读取之前检查文件长度来完成此操作(这意味着您不能直接使用readLine)