7

私は多くの例を試しましたが、誰もうまくいきません。私はこれを試してみましたが、うまくいきません。

も使ってみましたtryLock()。常に false を返します。なぜ?

private boolean checkCompleteFile(File f)
{           
    RandomAccessFile file = null;
    FileLock fileLock = null;

    try
    {
        file = new RandomAccessFile(f, "rw");
        FileChannel fileChannel = file.getChannel();

        fileLock = fileChannel.lock();
        if (fileLock != null)
        {
            fileLock.release();
            file.close();
            return false;
        }

    }
    catch(Exception e)
    {
         return false;
    }

    return true;
}
4

3 に答える 3

3

例外をキャッチして false を返します。そのため、常に false を取得し、例外で何かを行うか、キャッチしないので、例外がスローされたかどうかがわかります。一般的な例外をキャッチした場合、false の戻り値はあまり意味がありません。 .

try {
  lock = channel.tryLock();
  // ...
} catch (OverlappingFileLockException e) {
  // File is already locked in this thread or virtual machine
}
lock.release();
channel.close();

ファイルにアクセスして、失敗した場合は例外をキャッチするだけです。

boolean isLocked=false;
RandomAccessFile fos=null;
try {
      File file = new File(filename);
      if(file.exists())
        fos=new RandomAccessFile(file,"rw");        
}catch (FileNotFoundException e) {
    isLocked = true;
}catch (SecurityException e) {
    isLocked = true;
}catch (Exception e) {
    // handle exception
}finally {
    try {
        if(fos!=null) {
            fos.close();
        }
    }catch(Exception e) {
        //handle exception
    }
}

RandomAccessFileクラスがスローすることに注意してください。

FileNotFoundException -

モードが "r" であるが指定された文字列が既存の通常ファイルを示さない場合、またはモードが "rw" で始まるが指定された文字列が既存の書き込み可能な通常ファイルを示しておらず、その名前の新しい通常ファイルを指定できない場合作成されるか、ファイルを開くか作成するときに他のエラーが発生した場合。

SecurityException -

セキュリティ マネージャが存在し、その checkRead メソッドがファイルへの読み取りアクセスを拒否するか、モードが "rw" でセキュリティ マネージャの checkWrite メソッドがファイルへの書き込みアクセスを拒否する場合

于 2013-04-15T08:20:45.120 に答える
1

linux コマンドを使用するのはどうですか。

lsof -p 

このコマンドは、ファイルのオープン ステータスを表示します。それを解析して、誰がそれを使用しているかを確認できます。

于 2013-04-15T08:30:41.460 に答える