Java手表服务:不适用于安装在本地服务器中的远程文件



我有Java程序监视安装在本地服务器中的远程文件夹。但是,每当远程文件夹中的某些东西更改时,它都不会检测到任何更改/修改。

如果在安装的文件夹中进行更改/修改,则可以正常工作。

搜索网络,如Java Docs中的提及

如果观察文件未位于本地存储设备上,则 如果可以检测到文件的更改,请参见实现。在 特别是,不需要更改对文件进行的更改 检测到远程系统。

任何人都可以为我提供如何做到这一点的样本?以下是我当前的代码

WatchService watcher = FileSystems.getDefault().newWatchService();
    Path dir = Paths.get(directory);
    dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
    while (true) {
        WatchKey key;
        try {
            key = watcher.take();
        } catch (Exception ex) {
            return;
        }
        for (WatchEvent<?> event : key.pollEvents()) {
            WatchEvent.Kind<?> kind = event.kind();
            @SuppressWarnings("unchecked")
            WatchEvent<Path> ev = (WatchEvent<Path>) event;
            Path fileName = ev.context();
            if (kind == ENTRY_MODIFY) {
                    System.out.println("file has changed");
                   // other process    
            }
           if (kind == ENTRY_CREATE) {
                  System.out.println("file has created");
                  // other process
           }
        }
        boolean valid = key.reset();
        if (!valid) {
            break;
        }
   }

我有相同的问题并使用了org.apache.commons.io.monitor.FileAlterationMonitor。pom.xml如前所述如下所示,如下

<dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
</dependency>

用于使用的用法代码段如下:

    String monitoringDirectory= "<YOUR CODE HERE>"; 
    FileAlterationObserver observer = new FileAlterationObserver(monitorDirectory);
    logger.info("Start ACTIVITY, Monitoring "+monitorDirectory);
    observer.addListener(new FileAlterationListenerAdaptor(){
         @Override
         public void onDirectoryCreate(File file) {
            logger.info("New Folder Created:"+file.getName());
         }
         @Override
         public void onDirectoryDelete(File file) {
             logger.info("Folder Deleted:"+file.getName());
         } 
         @Override
         public void onFileCreate(File file) {
             logger.info("File Created:"+file.getName()+": YOUR ACTION");
         }
         @Override
         public void onFileDelete(File file) {
             logger.info("File Deleted:"+file.getName()+": NO ACTION");
         }  
      });
    /* Set to monitor changes for 500 ms */     
    FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
    try {
        monitor.start();
    } catch (Exception e) {
        logger.error("UNABLE TO MONITOR SERVER" + e.getMessage());
        e.printStackTrace();
    }

我想,Oracle的手表服务未检测到远程事件 - 该服务适用于本地目录。

您必须使用-org.apache.commons.io.monitor.FileAlterationMonitor API类 -

<dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
</dependency>

您应该使用该类Google搜索代码样本。

最新更新