Java 中的文件锁定



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

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) {
}

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

   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()));
                    // Check File Status if file is Locked or unlocked
                    if (lock==null) {
                        returnDto.setStatus("unlocked");
                        returnDto.setFilePath(listOfFiles[i].getAbsolutePath());
                    } else {
                        returnDto.setStatus("Locked");
                    }
                    returnDtoList.add(returnDto);
                }
            }

这两个代码片段来自不同的 API。 如何检查文件的状态是锁定还是解锁?

FileLock 类的文档说:

此文件锁定 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);
    }
}

相关内容

  • 没有找到相关文章

最新更新