抓住文件并将其锁定使用

时间:2016-11-01 16:50:02

标签: java locking

我有一个程序,当我启动它时,它将在特定文件夹中创建一个文件。

我正在尝试重新创建一个最近引起我注意的问题,但我正在努力这样做。

我需要做的是:一旦程序创建了一个文件,我需要抓住该文件(来自另一个程序)并阻止它被访问。我需要保持一两分钟,然后我可以释放它。我创建了一个小型独立项目来尝试抓取/锁定此文件夹,但它似乎不起作用,因为我的其他主项目仍然可以访问/操作此文件。

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,我试图推迟)

我在这里遗漏了什么吗?我曾尝试在堆栈和在线阅读多个帖子,但没有任何帮助我。

0 个答案:

没有答案