如何为另一个线程锁定文件
How to lock file for another threads
这是我将文件压缩成存档的方法:
public void addFilesToArchive(File source, File destination) throws
IOException, ArchiveException {
try (FileOutputStream archiveStream = new FileOutputStream(destination);
ArchiveOutputStream archive = new ArchiveStreamFactory()
.createArchiveOutputStream(getType(), archiveStream)) {
updateSourceFolder(source);
generateFileAndFolderList(source);
for (String entryName : fileList) {
ArchiveEntry entry = getEntry(entryName);
archive.putArchiveEntry(entry);
archive.closeArchiveEntry();
}
}
}
fileList 包含所有文件层次结构(文件夹和文件)
我想防止同时从不同线程压缩到一个目的地。
尝试使用:
FileChannel channel = archiveStream.getChannel();
channel.lock();
不过好像没什么用。我该如何解决这个问题?
您正在尝试针对其他 线程而不是其他进程锁定文件,而这正是文件锁不会做的事情。请参阅Javadoc。您需要使用同步或信号量。
这是我将文件压缩成存档的方法:
public void addFilesToArchive(File source, File destination) throws
IOException, ArchiveException {
try (FileOutputStream archiveStream = new FileOutputStream(destination);
ArchiveOutputStream archive = new ArchiveStreamFactory()
.createArchiveOutputStream(getType(), archiveStream)) {
updateSourceFolder(source);
generateFileAndFolderList(source);
for (String entryName : fileList) {
ArchiveEntry entry = getEntry(entryName);
archive.putArchiveEntry(entry);
archive.closeArchiveEntry();
}
}
}
fileList 包含所有文件层次结构(文件夹和文件)
我想防止同时从不同线程压缩到一个目的地。
尝试使用:
FileChannel channel = archiveStream.getChannel();
channel.lock();
不过好像没什么用。我该如何解决这个问题?
您正在尝试针对其他 线程而不是其他进程锁定文件,而这正是文件锁不会做的事情。请参阅Javadoc。您需要使用同步或信号量。