2016-12-29 1 views
0

Mein Programm überwacht jede Dateiänderung im angegebenen Dateipfad, wenn eine neue Datei kommt, wird eine Benachrichtigung ausgelöst, aber wird fehlschlagen, wenn im übergeordneten Ordner ein Unterordner erstellt wird. Der Dateipfad für den übergeordneten Ordner wird Monitor C:/play, aber wenn es einen neuen Unterordner wie im übergeordneten Ordner, mein Programm erkennt, aber wenn ich versuche, eine Datei in abc-Ordner einfügen, kann mein Programm nicht um zu erkennen, dass eine neue Datei erstellt wurde. Ich habe various methods getestet, aber leider kann ich es nicht arbeiten lassen.Anyone in der Lage, mir jede Anleitung auf meinem Referenzlink zu liefern? Mein Beispielcode folgt der Anleitung in meinem Referenzlink
Dies ist mein Quellcode nach dem Hinzufügen in die Funktion Unterverzeichnis

Unterverzeichnis und Hauptverzeichnis Überwachung in 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 ist wie dieser Code und meine Ordnerstruktur meine Referenz suchen, für die Überprüfung

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

Sie sollten an Ihrer Absicht arbeiten. – AxelH

Antwort

1

Kurz gesagt, Sie haben nur das zu überwachende Elternverzeichnis registriert. Alle von Ihnen erstellten Unterverzeichnisse werden nicht angezeigt. Siehe here.

+0

Ich habe versucht, WalkFileTree zu verklagen, aber es funktioniert auch nicht, ich bin mir nicht sicher, ob ich es falsch benutze oder nicht? – yumi

+0

Von Ihrem Code bin ich nicht sicher, was Sie mit 'walkfileTree' versuchen, aber Sie müssen Unterverzeichnisse manuell mit dem Watcher registrieren. Mein Verständnis ist, dass sie bei der Erstellung nicht automatisch beobachtet werden. – Kerry

+0

Lassen Sie mich meine Frage erneut bearbeiten, um Ihnen zu helfen, zu verstehen, was ich tue – yumi

Verwandte Themen