2010-05-03 32 views
6

Cố gắng sắp xếp/phân tích cú pháp một số tệp nhật ký. Các mục nhập bắt đầu với một ngày sau đó có thể mở rộng nhiều dòng.Máy quét Java sẽ không theo dõi tệp

Tác phẩm này hoạt động nhưng không bao giờ thấy các mục nhập mới cần lưu.

File inputFile = new File("C:/test.txt"); 
InputStream is = new FileInputStream(inputFile); 
InputStream bis = new BufferedInputStream(is); 
//bis.skip(inputFile.length()); 
Scanner src = new Scanner(bis); 
src.useDelimiter("\n2010-05-01 "); 

while (true) { 
    while(src.hasNext()){ 
    System.out.println("[ " + src.next() + " ]"); 
    } 
} 

Dường như máy quét() hoặc hasNext() của Máy quét mới phát hiện các mục nhập mới cần lưu.

Bất kỳ ý tưởng nào khác về cách tôi có thể triển khai, về cơ bản, một đuôi -f với dấu phân cách tùy chỉnh.


ok - sử dụng lời khuyên của Kelly tôi đang kiểm tra & làm mới máy quét, hoạt động này. Cảm ơn bạn !!

nếu có ai đó có đề xuất cải thiện plz!

File inputFile = new File("C:/test.txt"); 
InputStream is = new FileInputStream(inputFile); 
InputStream bis = new BufferedInputStream(is); 
//bis.skip(inputFile.length()); 
Scanner src = new Scanner(bis); 
src.useDelimiter("\n2010-05-01 "); 

while (true) { 
    while(src.hasNext()){ 
    System.out.println("[ " + src.next() + " ]"); 
    } 

    Thread.sleep(50); 
    if(bis.available() > 0){ 
    src = new Scanner(bis); 
    src.useDelimiter("\n2010-05-01 "); 
    } 
} 
+0

Bây giờ nó làm gì, nó ném một ngoại lệ hoặc treo trong một vòng lặp vô hạn mà không phát hiện dữ liệu mới? –

+0

vòng lặp vô hạn mà không phát hiện dữ liệu mới. đã thử nó một loạt các cách, thử nghiệm hasNext() 1, đệm/unbuffered .. –

Trả lời

1

Tôi đoán rằng Máy quét đang phân tích cú pháp bis được đệm nhưng bộ đệm không bao giờ được làm mới. Bạn có thể dựa vào BufferedInputStream hoặc Máy quét để tiếp tục đọc byte từ luồng nhưng tôi nghĩ bạn phải tự làm điều đó.

Từ Javadocs:

Một BufferedInputStream thêm chức năng để đầu vào khác dòng-cụ thể là, khả năng đệm đầu vào và để hỗ trợ việc đánh dấu và phương pháp thiết lập lại. Khi BufferedInputStream được tạo, một mảng đệm nội bộ được tạo. Khi byte từ luồng được đọc hoặc bỏ qua, bộ đệm trong là được nạp lại khi cần thiết từ chứa luồng đầu vào, nhiều byte tại một lần. Thao tác đánh dấu ghi nhớ một điểm trong luồng đầu vào và hoạt động đặt lại làm cho tất cả các byte đọc kể từ khi đánh dấu gần đây nhất hoạt động để đọc lại trước byte mới từ dòng đầu vào chứa .

+0

đồng ý. sửa đổi bài với cập nhật. cám ơn! –

Các vấn đề liên quan