専用フォルダーのファイル変更を追跡するための以下のコードがあります
Path path = Paths.get("f:\\logs");
WatchService watchService = FileSystems.getDefault().newWatchService();
WatchKey key = path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
while (true) {
final WatchKey watchKey = watchService.take();
for (WatchEvent<?> watchEvent : key.pollEvents()) {
WatchEvent.Kind<?> kind = watchEvent.kind();
if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
WatchEvent<Path> eventPath = (WatchEvent<Path>) watchEvent;
Path newFilePath = eventPath.context();
boolean writable = false;
System.out.println(writable);
long size = Files.size(newFilePath) / (1000 * 1000);
System.out.println(newFilePath.toAbsolutePath() + "wriable:" + writable + "size:" + size);
watchKey.reset();
}
}
}
しかし、ファイル (named=newfile.dat) が作成され、プログラムが次の行にヒットした場合:
長いサイズ = Files.size(newFilePath) / (1000 * 1000);
それは投げます
java.nio.file.NoSuchFileException: newfile.dat
および変数
writable
always= false (Whileループに入れてスリープして再チェックしても)
何が起こったのか教えてください??