Java中的文件锁定

时间:2018-08-08 09:59:26

标签: java filelock

我在一个文件夹中有一个文件列表, 我想锁定一个特定的文件(用户向我发送要锁定的文件的名称),我正在执行以下操作:

 private string strURL;
    private void webbMain_NewWindow2(object ppDisp, bool Cancel)
    {
        Cancel = true;
        webbMain.Navigate(strURL);
    }
    private void WebbMain_StatusTextChange(string Text)
    {
        strURL = Text;
    }

如果另一个用户想要查看文件列表,我必须告诉他们文件已锁定和未锁定的状态

try {

    File file = new File("filename");
    FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
    FileLock lock = channel.lock();
    try {
        lock = channel.tryLock();
    } catch (OverlappingFileLockException e) {
        // File is already locked 
    }

} catch (Exception e) {
}

这两个摘要来自不同的API。 如何检查文件状态为锁定或未锁定?

1 个答案:

答案 0 :(得分:3)

FileLock类上的documentation说:

  

此文件锁定API旨在直接映射到基础操作系统的本机锁定工具。因此,无论使用哪种语言编写程序,持有该文件的锁定对于所有有权访问该文件的程序都是可见的。

因此,您似乎可以使用与第一个代码段相同的代码:

File folder = new File("E:\\folder_to_LIST_OF_FILES");
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
    if (listOfFiles[i].isFile()) {
        FilesDto returnDto = new FilesDto();
        returnDto.setFileName(FilenameUtils.removeExtension(listOfFiles[i].getName()));

        File file = new File("filename");
        FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
        FileLock lock;
        try {
            lock = channel.tryLock();
        } catch (OverlappingFileLockException e) {
            // File is already locked 
        }

        if (lock==null) {
            returnDto.setStatus("unlocked");
            returnDto.setFilePath(listOfFiles[i].getAbsolutePath());

        } else {
            lock.release();
            returnDto.setStatus("Locked");
        }

        returnDtoList.add(returnDto);
    }
}