2016-12-29 31 views
0

我的程序正在監視指定文件路徑中的任何文件更改,如果有新文件到來,它將引發通知,但在父文件夾中創建任何子文件夾時會失敗。父文件夾的文件路徑是監視器C:/play但是當在父文件夾內創建像C:/play/abc這樣的新子文件夾時,我的程序能夠檢測到,但是當我試圖將任何文件插入到abc文件夾時,我的程序無法運行檢測到新文件已經創建。我已經測試various methods,但不幸的是我不能讓它工作。任何人都可以爲我提供任何指導我的參考鏈接?我的示例代碼是在我的參考鏈接中的指南

這是我的源代碼添加到功能後檢查子目錄

java中的子目錄和主目錄監視

public class fileStatus 
{ 
    public static void main(String [] args) throws InterruptedException 
    { 
    try(WatchService svc = FileSystems.getDefault().newWatchService()) 
    { 
     Map<WatchKey, Path> keyMap = new HashMap<>(); 
     Path path = Paths.get("C:/play"); 
     fileStatus fd = new fileStatus(); 
     fd.registerAll(path); 
     keyMap.put(path.register(svc, 
      StandardWatchEventKinds.ENTRY_CREATE), 
      path); 
     WatchKey wk ; 
     do 
     { 
      wk = svc.take(); 
      Path dir = keyMap.get(wk); 
      for(WatchEvent<?> event : wk.pollEvents()) 
      { 
       WatchEvent.Kind<?> type = event.kind(); 
       Path fileName = (Path)event.context(); 
       System.out.println("\nThe new file :"+fileName+ "Event :" +type); //print the new file name 
      } 
     }while(wk.reset()); 
} 
catch(IOException e) 
{ 
     System.out.println("Problem io in somewhere"); 
} 

} 

    private void registerAll(Path path) throws IOException 
    { 
     Files.walkFileTree(path, new SimpleFileVisitor<Path>() 
       { 
        @SuppressWarnings("unused") 
       public FileVisitResult preVisitDireotry(Path path,BasicFileAttributes attrs) throws IOException 
        { 
         return FileVisitResult.CONTINUE; 
        } 
       }); 

    } 
} 



This是我引用的代碼和我的文件夾結構是這樣的,

/root 
    /Folder A 
    /test.txt 
    /Folder B 
    /abc.txt 
+1

你應該在你的意圖。 – AxelH

回答

1

總之,您只註冊了要觀看的父目錄。您創建的任何子目錄都不會被監視。見here

+0

我試圖起訴walkFileTree,但它也無法正常工作,我不確定它是否以錯誤的方式使用它? – yumi

+0

從你的代碼中,我不確定你想用'walkfileTree'來做什麼,但是你必須手動向觀察者註冊子目錄。我的理解是,創作時不會自動監視它們。 – Kerry

+0

讓我再次編輯我的問題,以幫助您瞭解我在做什麼 – yumi