我有一个程序,当我启动它时,它将在特定文件夹中创建一个文件。
我正在尝试重新创建一个最近引起我注意的问题,但我正在努力这样做。
我需要做的是:一旦程序创建了一个文件,我需要抓住该文件(来自另一个程序)并阻止它被访问。我需要保持一两分钟,然后我可以释放它。我创建了一个小型独立项目来尝试抓取/锁定此文件夹,但它似乎不起作用,因为我的其他主项目仍然可以访问/操作此文件。
public class TestOpenFile {
public static void main(String[] args) throws IOException, InterruptedException {
Path faxFolder = Paths.get("D:/main/TEST/");
WatchService watchService = FileSystems.getDefault().newWatchService();
faxFolder.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
boolean valid = true;
do {
WatchKey watchKey = watchService.take();
for (WatchEvent event : watchKey.pollEvents()) {
WatchEvent.Kind kind = event.kind();
if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {
try {
Thread.sleep(100);
Path path = Paths.get("D:/main/TEST/TEST.run");
FileChannel channel = FileChannel.open(path, StandardOpenOption.WRITE,StandardOpenOption.APPEND);
FileLock lock = channel.lock();
System.out.println("SLEEP");
Thread.sleep(60000);
System.out.println("WAKE UP");
lock.release();
channel.close();
}
catch (IOException e) {
System.out.println("I/O Error: " + e.getMessage());
}
String fileName = event.context().toString();
System.out.println("File Created:" + fileName);
}
}
valid = watchKey.reset();
} while (valid);
}
}
Sp目前我开始运行TestOpenFile.java,它就在那里等待TEST目录中的事件。然后我启动我的其他项目,该项目将删除目录中的TEST.run文件。在TestOpenFile.java中,我想抓住该文件将其锁定并等待一分钟。
目前,我可以看到" SLEEP" print语句是小屋,但是我的其他项目将TEST.run文件重命名为TEST.done,我试图推迟)
我在这里遗漏了什么吗?我曾尝试在堆栈和在线阅读多个帖子,但没有任何帮助我。