2015-12-02 2 views
0

Моя ОС - Windows7.java Strange WatchService

я сделать каталог как этого

WatchService watchService = FileSystems.getDefault().newWatchService(); 
Path rootPath = Paths.createDirectory(Paths.get("c:/foo")); 
rootPath.register(watchService, ENTRY_MODIFY, ENTRY_CREATE); 

Path depth1Child = Paths.createDirectory(Paths.get("c:/foo/depth1")); 

WatchKey key = null; 

//printed : ENTRY_CREATE c:/foo/depth1 
while((key=watchService.poll()) != null) { 
    for (WatchEvent e : key.pollEvents()) 
     System.out.println(e.kind()+" "+e.context()); 
    key.reset(); 
} 

depth1Child.register(watchService, ENTRY_MODIFY, ENTRY_CREATE); 
Path depth2Child = Paths.createDirectory(Paths.get("c:/foo/depth1/depth2")); 

//printed : ENTRY_MODIFY c:/foo/depth1, ENTRY_CREATE c:/foo/depth1/depth2 
while((key=watchService.poll()) != null) { 
    for (WatchEvent e : key.pollEvents()) 
     System.out.println(e.kind()+" "+e.context()); 
    key.reset(); 
} 

почему diffent события после создания первого каталога глубины и создания второго пути?

Я регистрирую путь c:/foo с ENTRY_MODIFY и ENTRY_CREATE и c:/foo/depth1, c:/foo/depth2.

Спасибо за вашу помощь

ответ

0

Так как "C:/Foo" является зарегестрировано для ENTRY_MODIFY и ENTRY_CREATE событий, при создании "C:/Foo/depth1", вы получите ENTRY_CREATE события. Поскольку события ENTRY_MODIFY и ENTRY_CREATE регистрируются для «c:/foo/depth1», при создании «c:/foo/depth1/depth2» вы изменили «c:/foo/depth1», так что вы получите:

  • ENTRY_MODIFY для "C:/Foo/depth1"
  • ENTRY_CREATE для "C:/Foo/depth1/depth2"