Jawabannya sepertinya "tidak" ... dan "ya". Sepertinya tidak ada cara nyata untuk mengetahui apakah sebuah file terbuka untuk ditulis oleh aplikasi lain. Jadi, membaca dari file seperti itu hanya akan berlanjut sampai konten habis. Saya mengikuti saran Mike dan menulis beberapa kode tes:
Writer.java menulis string ke file dan kemudian menunggu pengguna menekan enter sebelum menulis baris lain ke file. Idenya adalah bahwa itu bisa dimulai, kemudian pembaca dapat mulai melihat bagaimana cara mengatasi file "parsial". Pembaca yang saya tulis ada di 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);
}
}
Tidak ada jaminan bahwa kode ini adalah praktik terbaik.
Ini meninggalkan opsi yang disarankan oleh Mike untuk memeriksa secara berkala apakah ada data baru untuk dibaca dari file tersebut. Hal ini kemudian memerlukan intervensi pengguna untuk menutup pembaca file ketika ditentukan bahwa pembacaan telah selesai. Atau, pembaca perlu diberi tahu tentang konten file dan dapat menentukan serta kondisi akhir penulisan. Jika isinya XML, akhir dokumen dapat digunakan untuk menandakan ini.