Câu trả lời có vẻ là "không" ... và "có". Dường như không có cách nào thực sự để biết liệu một tập tin có được mở để viết bởi một ứng dụng khác hay không. Vì vậy, việc đọc từ một tệp như vậy sẽ chỉ diễn ra cho đến khi nội dung cạn kiệt. Tôi nghe theo lời khuyên của Mike và viết một số mã kiểm tra:
Writer.java viết một chuỗi vào tập tin và sau đó chờ đợi cho người dùng để nhấn enter trước khi viết một dòng khác để nộp. Ý tưởng được rằng nó có thể được bắt đầu lên, sau đó một người đọc có thể được bắt đầu để xem làm thế nào nó đối phó với các tập tin "một phần". Người đọc tôi đã viết nằm 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 đảm bảo rằng mã này là thực hành tốt nhất.
Tùy chọn này được Mike đề xuất định kỳ kiểm tra xem có dữ liệu mới được đọc từ tệp hay không. Điều này sau đó yêu cầu người dùng can thiệp để đóng trình đọc tệp khi xác định rằng việc đọc hoàn tất. Hoặc, người đọc cần phải được thực hiện nhận thức được nội dung của tập tin và có thể xác định và kết thúc điều kiện 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.
Nguồn
2008-08-07 07:25:02
hey, như tôi đang phải đối mặt với một kịch bản tương tự như tôi đã từ ngữ nếu bạn đã tìm thấy một giải pháp tốt hơn so với cái được chấp nhận? –
Tôi biết đây là một câu hỏi cũ, nhưng vì lợi ích của độc giả trong tương lai, bạn có thể mở rộng thêm về trường hợp sử dụng của mình thêm một chút không? Nếu không có thêm thông tin, người ta tự hỏi nếu bạn có thể giải quyết vấn đề sai. – user359996
Sử dụng cơ sở dữ liệu. Những 'đọc một tập tin trong khi nó được viết' kịch bản kết thúc trong nước mắt. – EJP