1

サーバーにファイルを書き込む必要があります。別のアプリケーションには、特定の間隔でファイルを読み取るスケジュールされたジョブがあります。書き込みが完了するまで、ファイルを読み取ることはできません。使ってみました

File.isReadable(false)

しかし、これは機能していません。また、まだ書き込みを行っている場合、スケジューラはファイルから不完全なデータを取得しています。

解決策はありますか?

4

4 に答える 4

4

別のファイル名に書き込み、書き込みが完了したら、スケジューラが期待する名前にファイルの名前を変更します。Linux などで実行している場合、同じファイル システム内のファイルの名前変更はアトミックです。

File tempFile = new File("/path/to/file.tmp");
// write to tempFile
tempFile.renameTo(new File("/path/to/file"));
于 2013-05-29T12:14:04.917 に答える
3

マーカーと同じ名前の別のファイルを使用できます。書き込みを開始しFileName.txt、終了したらファイルを作成しますFileName.rdy
。アプリケーションは *.rdy ファイルのみをチェックし、見つかった場合は FileName.txt を読み取ります。

于 2013-05-29T12:15:59.823 に答える
1

Filelock APIを使用できます。

ここでそのしくみを簡単に説明しました。

于 2013-05-29T12:13:41.993 に答える
0

より良いオプションは、読み取りと書き込みの手順を同期することです...

同期化された {} ブロックでファイルを読み取り、ファイルを書き込むコードを配置します....他の完了まで待機できるようにします

于 2013-05-29T12:16:48.087 に答える