質問

ようにしているロックファイルJava Windows環境 FileLock つかの問題:った後、ロックファイルをでもアクセスによるその他のプロセスの少なくとも一部です。

コード例は、以下の

public class SimpleLockExample {
    public static void main(String[] args) throws Exception {
        String filename = "loremlipsum.txt";

        File file = new File(filename);
        RandomAccessFile raf = new RandomAccessFile(file, "rw");
        FileChannel channel = raf.getChannel();

        FileLock lock = null;
        try {
            lock = channel.tryLock();
            String firstLine = raf.readLine();
            System.out.println("First line of file : " + firstLine);
            waitForEnter();
            lock.release();
        } catch (OverlappingFileLockException e) {
            e.printStackTrace();
        }

        lock.release();
        System.out.println("Lock released");

        channel.close();
    }

    private static void waitForEnter() throws Exception {
        BufferedReader reader =
                new BufferedReader(new InputStreamReader(System.in));
        reader.readLine();
        reader.close();
    }
}

このロックマファイルとこの例では、施錠されております:

  • できませんの削除をサンクスやセブン-イレブン
  • Eclipseを拒否している

...しかし、その先には、まだ完全に防弾:

  • までScite(テキストエディタ)は、例えば、コンテンツを表示しないを選択し保存するファイルを空にしていた一部のコンテンツが書かれている)が成功するとファイルの内容をクリアし...(コンテンツが存在するが、その後もう入れているところもあったものをScite)

る方法はありま防止のためのファイルから完全に上書きされている/クリアその他のプロセスのJava Windows?

ばんか、私が使っている排他ロックするメカニズム共有ロックをいただいておりますことができます。

この試験のために、Windows2000年.

br, Touko

役に立ちましたか?

解決

トリッキー、FileLockのAPI自体はあまり約束していません。

  

このファイルロックAPIをすることを意図しています   ネイティブロックに直接マップ   基礎となるオペレーティングの施設   システム。したがって、ファイルに保持されているロック   そのすべてのプログラムに表示されるはずです   にかかわらず、ファイルへのアクセス権を持っています   で、これらのプログラム言語   書かれています。

     

実際にロックするかどうか   から別のプログラムを防止   ロックのコンテンツにアクセス   領域は、システムに依存しており、   したがって、未指定。ネイティブ   いくつかのファイルロック機能   システムは、単に助言している意味します   プログラムが協調しなければならないこと   で知られているロックプロトコルを遵守   データの整合性を保証するため。オン   他のシステムのネイティブファイルロックされています   その場合は、1つのプログラムを意味し、必須   ファイルの領域は、他のロック   プログラムは、実際に防止することができます   そのようにその領域へのアクセス   ロックに違反します。まだ他には   ネイティブのファイルロックがあるかどうかをシステム、   諮問または必須で設定可能です   ファイル単位で。確実にするために、   全体で一貫性と正しい行動   プラットフォームは、それを強くお勧めします   このAPIによって提供さロックがあること   彼らは勧告的ロックであるかのように使用します。

は奇妙なことに、それは開発の下にあったAPIをロックファイルに関する議論は、Windows OSのの必須のロックとUnix上の唯一の諮問ロックを提供することを主張しました。だから読書に一つはあなたのコードは、Windows上でうまく動作することを期待することがあります。

お使いのエディタがそんなに一時ファイルの作成などのファイルを変更して、新しいバージョンでロックされているファイルのバージョンをreplceするために、ディレクトリエントリを操作していないこと、それを何が起こっているか

私はかしら。 Windowsは、このような行動を許可しますか?

あなたが必要とするコントロールのレベルを取得するために、JNIに頼る必要があります場合は、

私は疑問に思う。

他のヒント

それがロックを取得していない場合は、

.tryLockへのあなたの()の呼び出しはnullを返すことがあります。 Javadocから:

  

新たに取得したロックを表すロックオブジェクト、またはヌル別のプログラムは、重複ロックを保持しているため、ロックを取得できなかった場合

また、あなたのコードは、現在のファイルを開き、のそれはロックを取得しようとします。代わりに、ループロックを取得しようとしている、とあなたはそれを持っていると、ファイルを開いて、ファイルを読み込み、ファイルを閉じて、その後、ロックをあきらめる。必要がありますそして、あなたのコードが開催されたロックで例外をスローするだけの場合には、finally {}句でロックをあきらめます。 (今までいくつかのファイルがロックされたという理由だけで、Windowsマシンを再起動しなければならなかった?)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top