जवाब "नहीं" ... और "हां" लगता है। ऐसा लगता है कि कोई फ़ाइल किसी अन्य एप्लिकेशन द्वारा लिखने के लिए खुली है या नहीं यह जानने का कोई वास्तविक तरीका नहीं है। इसलिए, इस तरह की फ़ाइल से पढ़ना तब तक प्रगति करेगा जब तक कि सामग्री समाप्त न हो जाए। मैंने माइक की सलाह ली और कुछ टेस्ट कोड लिखे:
Writer.java फाइल करने के लिए एक स्ट्रिंग लिखता है और फिर फाइल के लिए एक और लाइन लिखने से पहले उपयोगकर्ता के हिट होने का इंतजार करता है। यह विचार किया जा रहा है कि इसे शुरू किया जा सकता है, फिर एक पाठक को यह देखने के लिए शुरू किया जा सकता है कि यह "आंशिक" फ़ाइल के साथ कैसे मेल खाता है। मैंने जो पाठक लिखा है, वह Reader.java में है।
Writer.java
public class Writer extends Object
{
Writer () {
}
public static String[] strings =
{
"Hello World",
"Goodbye World"
};
public static void main(String[] args)
throws java.io.IOException {
java.io.PrintWriter pw =
new java.io.PrintWriter(new java.io.FileOutputStream("out.txt"), true);
for(String s : strings) {
pw.println(s);
System.in.read();
}
pw.close();
}
}
Reader.java
public class Reader extends Object
{
Reader () {
}
public static void main(String[] args)
throws Exception {
java.io.FileInputStream in = new java.io.FileInputStream("out.txt");
java.nio.channels.FileChannel fc = in.getChannel();
java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(10);
while(fc.read(bb) >= 0) {
bb.flip();
while(bb.hasRemaining()) {
System.out.println((char)bb.get());
}
bb.clear();
}
System.exit(0);
}
}
कोई गारंटी नहीं है कि यह कोड सबसे अच्छा अभ्यास है।
यह समय-समय पर जाँच के माइक द्वारा सुझाए गए विकल्प को छोड़ देता है यदि फ़ाइल से पढ़ा जाने वाला नया डेटा है। इसके बाद फ़ाइल रीडर को बंद करने के लिए उपयोगकर्ता के हस्तक्षेप की आवश्यकता होती है जब यह निर्धारित होता है कि रीडिंग पूरी हो गई है। या, पाठक को फ़ाइल की सामग्री से अवगत कराना होगा और लिखने की स्थिति का निर्धारण और अंत करने में सक्षम होना चाहिए। यदि सामग्री XML थी, तो दस्तावेज़ के अंत का उपयोग यह संकेत देने के लिए किया जा सकता है।