Java教程

关于java WatchService使用的研究

本文主要是介绍关于java WatchService使用的研究,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

需求:要求监听到在idea中rebuild的class文件的变化事件。

问题: 只能监听到第一次出现的事件,之后的事件没有监听到。

经过实验后推测原因是idea每次rebuild会重新生成文件夹,
导致之前register失效。

解决方法在最后重新register

    public static void main(String[] args) throws IOException, InterruptedException {
        WatchService watchService
                = FileSystems.getDefault().newWatchService();

        Path path = Paths.get("D:\\project-2022\\java\\javaweb\\web\\WEB-INF\\classes\\com\\xpcf\\javaweb");

        path.register(
                watchService,
                StandardWatchEventKinds.ENTRY_CREATE,
                StandardWatchEventKinds.ENTRY_DELETE,
                StandardWatchEventKinds.ENTRY_MODIFY);

        WatchKey key;
        while ((key = watchService.take()) != null) {
            for (WatchEvent<?> event : key.pollEvents()) {
                System.out.println(
                        "Event kind:" + event.kind()
                                + ". File affected: " + event.context() + ".");
            }
            key.reset();
            // 使用后会增加一个数量级的时间在ns级别
            path.register(
                    watchService,
                    StandardWatchEventKinds.ENTRY_CREATE,
                    StandardWatchEventKinds.ENTRY_DELETE,
                    StandardWatchEventKinds.ENTRY_MODIFY);


        }
    }

这篇关于关于java WatchService使用的研究的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!