この質問に関連し て、削除されたファイルへの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;
}
他のアイデアはありますか?