Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

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: プロセスはファイルにアクセスできません。別のプロセスがファイルの一部をロックしています。
---------------------------------------

このエラーを回避したいのですが、どなたか教えていただけないでしょうか。
また、ファイルを他プロセスからロックするベストプラクティスがあれば、教えていただけますでしょうか。

7

回答

461

閲覧

7件の回答

評価

0

肝心な情報を書き忘れました。
上記はJava 1.6環境で作成しております。

評価

0

ファイルロックのサンプルは検索すればいくらでも出てくるのだが、一つでも見てみただろうか。
多くのサンプルでファイル名が ~.lock である理由を考えてみよう。

評価

0

>>匿名(2017-07-27 23:50:03)様
日本語が読めないならば無理に回答する必要ありません。

評価

0

そういう返答は、恥ずかしいからしないほうがいいよ。

評価

0

http://d.hatena.ne.jp/orangehat/20090926

評価

0

>>匿名  2017-07-28 21:51:04
そのままお返しします

評価

0

この程度の質問をしておいて、良くそこまで恥ずかしげもなく言えるものだ。
ある意味感心させられる。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名