サーバーにファイルを書き込む必要があります。別のアプリケーションには、特定の間隔でファイルを読み取るスケジュールされたジョブがあります。書き込みが完了するまで、ファイルを読み取ることはできません。使ってみました
File.isReadable(false)
しかし、これは機能していません。また、まだ書き込みを行っている場合、スケジューラはファイルから不完全なデータを取得しています。
解決策はありますか?
別のファイル名に書き込み、書き込みが完了したら、スケジューラが期待する名前にファイルの名前を変更します。Linux などで実行している場合、同じファイル システム内のファイルの名前変更はアトミックです。
File tempFile = new File("/path/to/file.tmp");
// write to tempFile
tempFile.renameTo(new File("/path/to/file"));
マーカーと同じ名前の別のファイルを使用できます。書き込みを開始しFileName.txt
、終了したらファイルを作成しますFileName.rdy
。アプリケーションは *.rdy ファイルのみをチェックし、見つかった場合は FileName.txt を読み取ります。
より良いオプションは、読み取りと書き込みの手順を同期することです...
同期化された {} ブロックでファイルを読み取り、ファイルを書き込むコードを配置します....他の完了まで待機できるようにします