FileReader を使用してファイルを開く Java プロセスがあります。別の (Java) プロセスがこのファイルを開かないようにするには、または少なくともその 2 番目のプロセスにファイルがすでに開かれていることを通知するにはどうすればよいでしょうか。これにより、ファイルが開いている場合に 2 番目のプロセスが自動的に例外を取得するようになりますか (これで問題が解決します)。それとも、最初のプロセスで何らかのフラグまたは引数を使用して明示的にファイルを開く必要がありますか。
明確にするために:
フォルダーを一覧表示し、一覧にある各ファイルを開いて処理する Java アプリがあります。各ファイルを順番に処理します。各ファイルの処理は、ファイルの読み取りと、内容に基づく計算で構成され、約 2 分かかります。また、同じことを行うがファイルに書き込む別の Java アプリもあります。これらのアプリを同時に実行できるようにしたいので、シナリオは次のようになります。ReadApp はフォルダーを一覧表示し、ファイル A、B、C を検索します。ファイル A を開いて、読み取りを開始します。WriteApp はフォルダーを一覧表示し、ファイル A、B、C を検索します。ファイル A を開き、(例外またはその他の方法で) 開いていることを確認して、ファイル B に移動します。ReadApp はファイル A を終了し、ファイル B に進みます。開いていることを確認して、ファイル C に進みます。WriteApp が同じファイルを読み取っているときに書き込みを行わないことが重要です (その逆も同様です)。これらは異なるプロセスです。
ベストアンサー1
おそらく、FileChannel.lock が必要なものでしょう。
try (
FileInputStream in = new FileInputStream(file);
java.nio.channels.FileLock lock = in.getChannel().lock();
Reader reader = new InputStreamReader(in, charset)
) {
...
}
(免責事項: コードはコンパイルされておらず、テストもされていません。)
「プラットフォームの依存関係」というセクションに注意してください。FileLock の API ドキュメント。