import java.io.*;
import java.nio.file.*;
public class Tmp {
public static void main(String [] args) throws IOException {
int count = 0;
Path path = Paths.get("C:\\tmp\\");
WatchService ws = null;
try {
ws = FileSystems.getDefault().newWatchService();
path.register(ws, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.OVERFLOW);
} catch (IOException ioe) {
ioe.printStackTrace();
}
while(true) {
WatchKey key = null;
try {
key = ws.take();
} catch(InterruptedException ie) {
ie.printStackTrace();
}
for(WatchEvent<?> event: key.pollEvents()) {
switch(event.kind().name()) {
case "OVERFLOW":
System.out.println(++count + ": OVERFLOW");
break;
case "ENTRY_MODIFY":
System.out.println(++count + ": File " + event.context() + " is changed!");
break;
case "ENTRY_CREATE":
System.out.println(++count + ": File " + event.context() + " is created!");
break;
case "ENTRY_DELETE":
System.out.println(++count + ": File " + event.context() + " is deleted!");
break;
default:
System.out.println(++count + ": UNKNOWN EVENT!");
}
}
key.reset();
}
}
}
जब मैं इस चलाने के लिए और फिर नोटपैड खोला ++ और फिर एक नई खाली फ़ाइल बनाया है और C:\tmp\
निर्देशिका में a.txt
के रूप में यह बचाया मैं उत्पादन मिल गया:वॉच सर्विस सेवा इतने सारे ऑपरेशन क्यों उत्पन्न करता है?
1: File a.txt is created!
2: File a.txt is deleted!
3: File a.txt is created!
कि क्यों है? ऐसा लगता है कि फ़ाइल बनाई गई थी और फिर हटा दी गई और फिर फिर से बनाई गई। क्यूं कर?
जब मैं फ़ाइल में कुछ पाठ रखा और बचाया यह उत्पादन किया गया था:
4: File a.txt is changed!
5: File a.txt is changed!
इसे दो बार क्यों बदल दिया?
मुझे लगता है कि आप WatchService के साथ जो व्यवहार देख रहे हैं वह नोटपैड ++ के रास्ते के कारण है और कुछ आईओ ऑपरेशंस करते समय विंडोज ऑपरेटिंग सिस्टम काम करता है। मैंने पाया है कि "मानक" विंडोज नोटपैड की तरह कुछ आमतौर पर सबसे अधिक अपेक्षित व्यवहार उत्पन्न करता है। मुझे संदेह है कि यदि आप प्रोसेस एक्सप्लोरर (http://technet.microsoft.com/en-gb/sysinternals/bb896653 का उपयोग करते हैं।एएसपीएक्स) एक ओएस स्तर पर आईओ गतिविधि की निगरानी करने के लिए आप एक ही परिणाम देखेंगे। –
यह इस तथ्य के कारण हो सकता है कि सामग्री और मेटाडाटा लिखने को अलग से किया जाता है। – afk5min