Regarder un Répertoire pour les Modifications en Java

Je veux regarder un répertoire pour les modifications de fichiers. Et j'ai utilisé WatchService en java.nio. Je peux réussir à écouter fichier créé l'événement. Mais je ne peux pas écouter de fichier modifier l'événement. J'ai vérifié officiel java tutoriel, mais encore de la difficulté.

Voici le code source.

import static java.nio.file.LinkOption.NOFOLLOW_LINKS;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.OVERFLOW;
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
public class MainWatch {
public static void watchDirectoryPath(Path path) {
//Sanity check - Check if path is a folder
try {
Boolean isFolder = (Boolean) Files.getAttribute(path,
"basic:isDirectory", NOFOLLOW_LINKS);
if (!isFolder) {
throw new IllegalArgumentException("Path: " + path
+ " is not a folder");
}
} catch (IOException ioe) {
//Folder does not exists
ioe.printStackTrace();
}
System.out.println("Watching path: " + path);
//We obtain the file system of the Path
FileSystem fs = path.getFileSystem();
//We create the new WatchService using the new try() block
try (WatchService service = fs.newWatchService()) {
//We register the path to the service
//We watch for creation events
path.register(service, ENTRY_CREATE);
path.register(service, ENTRY_MODIFY);
path.register(service, ENTRY_DELETE);
//Start the infinite polling loop
WatchKey key = null;
while (true) {
key = service.take();
//Dequeueing events
Kind<?> kind = null;
for (WatchEvent<?> watchEvent : key.pollEvents()) {
//Get the type of the event
kind = watchEvent.kind();
if (OVERFLOW == kind) {
continue; //loop
} else if (ENTRY_CREATE == kind) {
//A new Path was created
Path newPath = ((WatchEvent<Path>) watchEvent)
.context();
//Output
System.out.println("New path created: " + newPath);
} else if (ENTRY_MODIFY == kind) {
//modified
Path newPath = ((WatchEvent<Path>) watchEvent)
.context();
//Output
System.out.println("New path modified: " + newPath);
}
}
if (!key.reset()) {
break; //loop
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
public static void main(String[] args) throws IOException,
InterruptedException {
//Folder we are going to watch
//Path folder =
//Paths.get(System.getProperty("C:\\Users\\Isuru\\Downloads"));
File dir = new File("C:\\Users\\Isuru\\Downloads");
watchDirectoryPath(dir.toPath());
}
}
  • Quel système d'exploitation et la version de Java?
  • Windows 8 et Java 1.7
  • Avez-vous essayé le "stock" WatchDir.java ? Il fonctionne sur Linux, au moins.
InformationsquelleAutor Isuru | 2014-05-04