0
ファイルのロックについて
バッチプログラムが起動中している間、処理の流れによっては書き込む必要があるかもしれないファイルをロックしたく思っております。
(いざ書き込む時に他プロセスでロックされないようにする保険の意)
プログラム起動時にファイルをロックし、書き込む際に書き込めば良いのではないかと考え、FileChannelでロックをかけてみましたが、Buffered Writerで開こうとすると例外が発生してしまいます。
サンプルコードは以下です。
---------------------------------------
public static void main(String[] args) throws Exception {
File lockFile = new File("C:\\hoge\\lock.txt");
FileChannel channel = new RandomAccessFile(lockFile, "rw").getChannel();
FileLock lock = channel.tryLock();
if (lock == null) {
return;//ロック済み
}
System.out.println("ロックOK");
System.out.println("------------------------------------------------");
BufferedWriter bw = null;
try{
bw = new BufferedWriter(new FileWriter(lockFile));
bw.write("hogehoge");
bw.flush();
}finally{
if(bw != null)bw.close();
}
}
---------------------------------------
発生する例外は以下になります。
---------------------------------------
Exception in thread "main" java.io.IOException: プロセスはファイルにアクセスできません。別のプロセスがファイルの一部をロックしています。
---------------------------------------
このエラーを回避したいのですが、どなたか教えていただけないでしょうか。
また、ファイルを他プロセスからロックするベストプラクティスがあれば、教えていただけますでしょうか。