2016-12-29 19 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

関連する問題