Câu trả lời dường như là "không" ... và "có". Dường như không có cách thực sự nào để biết liệu một tệp có được mở để viết bởi ứng dụng khác hay không. Vì vậy, việc đọc từ một tệp như vậy sẽ chỉ tiến triển cho đến khi hết nội dung. Tôi đã nghe lời khuyên của Mike và viết một số mã thử nghiệm:
Writer.java ghi một chuỗi vào tệp và sau đó đợi người dùng nhấn enter trước khi ghi một dòng khác vào tệp. Ý tưởng là nó có thể được khởi động, sau đó người đọc có thể được bắt đầu để xem cách nó đối phó với tệp "một phần". Trình đọc mà tôi đã viết là trong 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);
}
}
Không có gì đảm bảo rằng mã này là phương pháp hay nhất.
Điều này để lại tùy chọn được Mike đề xuất kiểm tra định kỳ nếu có dữ liệu mới được đọc từ tệp. Điều này sau đó yêu cầu sự can thiệp của người dùng để đóng trình đọc tệp khi xác định rằng việc đọc đã hoàn thành. Hoặc, người đọc cần được biết nội dung của tệp và có thể xác định và điều kiện kết thúc ghi. Nếu nội dung là XML, phần cuối của tài liệu có thể được sử dụng để báo hiệu điều này.