2011-11-08 40 views
5

Tôi đang cố gắng đọc trong một tệp lớn (700GB) và từng bước xử lý nó, nhưng mạng tôi đang làm việc sẽ thỉnh thoảng đi xuống, cắt truy cập vào tệp. Điều này ném một java.io.IOException nói với tôi rằng "Tên mạng được chỉ định không còn khả dụng". Có cách nào mà tôi có thể bắt ngoại lệ này và chờ đợi, nói, mười lăm phút, và sau đó thử lại đọc, hoặc là đối tượng Reader chiên khi truy cập vào tập tin bị mất?Khôi phục từ IOException: tên mạng không còn có sẵn

Nếu trình đọc được hiển thị vô dụng khi kết nối bị mất, có cách nào để tôi có thể viết lại theo cách sao cho tôi "lưu địa điểm của tôi" và sau đó bắt đầu đọc từ đó mà không phải đọc và loại bỏ tất cả dữ liệu trước nó? Ngay cả chỉ nhai dữ liệu mà không cần xử lý phải mất một thời gian dài khi có 500GB của nó để có được thông qua.

Hiện nay, các mã trông giống như sau (thay đổi nội dung cho ngắn gọn):

class Processor { 
    BufferedReader br; 

    Processor(String fname) { 
     br = new BufferedReader(new FileReader("fname")); 
    } 

    void process() { 
     try { 
      String line; 
      while((line=br.readLine)!=null) { 
       ...code for processing the line goes here... 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Cảm ơn bạn đã dành thời gian.

+0

Anh ấy phải là người đã tấn công Sony .... 700GB Holy crap ... –

Trả lời

4

Bạn có thể theo dõi các byte đã đọc trong một biến. Ví dụ ở đây tôi theo dõi trong một biến gọi là đọc, và buff là char []. Không chắc chắn nếu điều này là có thể bằng cách sử dụng phương pháp readLine.

read+=br.read(buff); 

Sau đó, nếu bạn cần phải khởi động lại, bạn có thể bỏ qua mà nhiều byte

br.skip(read); 

Sau đó, bạn có thể giữ chế biến đi. Chúc may mắn

+2

Một số triển khai 'InputStream' cũng hỗ trợ phương thức' mark() ', cho phép bạn về cơ bản lưu vị trí của bạn trong luồng. Có thể hữu ích cũng ... – BenCole

0

Tôi nghi ngờ rằng fd cơ bản sẽ vẫn có thể sử dụng được sau lỗi này, nhưng bạn sẽ phải thử nó. Có lẽ bạn sẽ phải mở lại tệp và chuyển đến nơi bạn đã đến.

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