java - 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);
}
}
推荐阅读
- c - 我将数组的旧元素保存在新数组中。我该如何解决这个问题?
- javascript - 如何调试 Outlook 加载项?
- firebase - Firebase Firestore 在查询流中再次获取文档
- java - 缓存依赖 不适用于 Tomcat 9.0.37 的更高版本,同样适用于 9.0.20
- openpyxl - OpenPyXL - 在现有的 excel 文件中查找最后一行
- typeorm - TypeORM:必须声明标量变量@user
- haskell - 使简单的表单类型安全
- css - Angular 会忽略 ng-template 中的 css 类吗?
- python - 使用硒存储网页中的值
- excel - 如果文件夹存在,如何获取警告消息?