คำตอบน่าจะเป็น "ไม่" ... และ "ใช่" ดูเหมือนว่าจะไม่มีทางรู้ได้อย่างแท้จริงว่าไฟล์นั้นเปิดให้เขียนโดยแอปพลิเคชันอื่นหรือไม่ ดังนั้นการอ่านจากไฟล์ดังกล่าวจะดำเนินต่อไปจนกว่าเนื้อหาจะหมด ฉันรับคำแนะนำของไมค์และเขียนรหัสทดสอบ:
Writer.java เขียนสตริงลงในไฟล์จากนั้นรอให้ผู้ใช้กด Enter ก่อนที่จะเขียนบรรทัดอื่นไปยังไฟล์ แนวคิดที่ว่ามันสามารถเริ่มต้นได้จากนั้นผู้อ่านสามารถเริ่มต้นเพื่อดูว่ามันจัดการกับไฟล์ "บางส่วน" ได้อย่างไร โปรแกรมอ่านที่ฉันเขียนอยู่ใน 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);
}
}
ไม่มีการรับประกันว่ารหัสนี้เป็นแนวทางปฏิบัติที่ดีที่สุด
ซึ่งจะทำให้ตัวเลือกที่ Mike แนะนำเป็นระยะ ๆ เพื่อตรวจสอบว่ามีข้อมูลใหม่ให้อ่านจากไฟล์หรือไม่ จากนั้นต้องมีการแทรกแซงของผู้ใช้เพื่อปิดโปรแกรมอ่านไฟล์เมื่อพิจารณาแล้วว่าการอ่านเสร็จสมบูรณ์ หรือผู้อ่านจะต้องทราบเนื้อหาของไฟล์และสามารถกำหนดและสิ้นสุดเงื่อนไขการเขียนได้ หากเนื้อหาเป็น XML สามารถใช้จุดสิ้นสุดของเอกสารเพื่อส่งสัญญาณนี้ได้