代码之家  ›  专栏  ›  技术社区  ›  St.Antario

在Java中侦听多个目录以创建文件

  •  1
  • St.Antario  · 技术社区  · 7 年前

    我使用inotify nio包装器捕获特定目录中的文件创建。好的,我有这个

    private final String tmpDir1 = Files.createTempDirectory(null);
    private final String tmpDir2 = Files.createTempDirectory(null);
    
    WatchService watchService = FileSystems.getDefault.newWatchService()
    
    Paths.get(tmpDir1).register(watchService, ENTRY_CREATE)
    Paths.get(tmpDir2).register(watchService, ENTRY_CREATE)
    
    public String getModifiedFilePath(){
        WatchKey key = ((WatchEvent<Path>) watchService.take())
        //Does p belongs to tmpDir1 or tmpDir2?
        Path p = ((WatchEvent<Path>)(key.pollEvents().iterator().next())).context()
        return //???
    }
    

    按照方法文件中的规定 WatchEvent#context

    返回事件的上下文。假使 ENTRY_CREATE ,则, ENTRY_DELETE ENTRY_MODIFY 事件上下文是 Path 那就是 这个 向监视注册的目录之间的相对路径 服务,以及创建、删除或修改的条目

    但是 sun.nio.fs.AbstractWatchKey 包含字段 private final Path dir .但该类是包私有的。是否有方法获取 WatchEvent#上下文 属于?

    UPD:为每个我想看的目录创建inotify实例听起来很有意思。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Sergey Prokofiev    7 年前

    享受

    public Path getModifiedFilePath() throws InterruptedException {
        WatchKey key = watchService.take();
        return (Path) key.watchable();
    }
    
        2
  •  1
  •   Zoltan Szabo    7 年前

    通过使用Java反射API,可以修改访问修饰符。 Set private field value with reflection