2

私はFileInputStreamを使用して毎秒ファイルを読み取るJavaアプリを書いています(それは別のスレッドの無限ループ内にあり、その後1秒間スリープします)

ファイルは別のアプリケーションで開かれます。

他のアプリケーションでファイルを保存しようとすると、ファイルが別のプログラムによって使用されているというエラーメッセージが表示されます。

FileLock APIを読み、書き込みと読み取りでロックとリリースを実装しました。

FileOutputStream fos = new FileOutputStream(file);
FileLock fileLock = fos.getChannel().lock();
if (fileLock != null) {
    fos.write(fileContent);
    fileLock.release();
}
fos.close();

2つのアプリケーションがアクセスしているファイルのファイルロックを無効にするにはどうすればよいですか?

ありがとうございました!!

編集:私はWINDOWS7でデバッグしています

4

2 に答える 2

1

それはあなたのOSに依存します。ロックをサポートしているOSはWindowsだけだと思います。Unlockerをダウンロードしてみてください。これを達成するための純粋なJavaの方法はないと思います。

于 2012-04-12T08:59:32.563 に答える
1

適切なtry-finallyイディオムを使用して、取得したロックを常に解放するようにしてください。これは私が本番環境で使用しているコードであり、Windows7では問題ありません。

OutputStream os = openFile();
try {
  if (os.getChannel().tryLock() == null) return;
  ... write to the file ...
}
finally { os.close(); } // this automatically releases the lock
于 2012-04-12T09:56:32.427 に答える