2015-01-22 19 views
5

Điều này khiến tôi phát điên. Tôi có đoạn code sau đây mà đọc một tập tin csv và tái định dạng nó thành một bản sao dán sẵn sàng dạng mảng java:Viết tệp Java Ngẫu nhiên dừng lại?

CSVReader reader = new CSVReader(new FileReader(fileName), ',' , '"' , 0); 
    FileWriter writer = new FileWriter(outFile); 
    //Read CSV line by line and use the string array as you want 
    //Read all rows at once 
    List<String[]> allRows = reader.readAll(); 

    //print table header 
    //Read CSV line by line and use the string array as you want 
for(String[] row : allRows){ 
    System.out.println(Arrays.toString(row)); 
    writer.write("{"); 
    for(int lcv = 0;lcv<row.length;lcv++){ 
     if(lcv == row.length -1){ 
      writer.write(row[lcv]); 
     }else{ 
      writer.write(row[lcv]+","); 
     } 
    } 
    writer.write("},\n"); 
} 

Như bạn có thể thấy, các mã in các bản ghi trong tập tin để an ủi, cũng như vào tệp để dán bản sao của tôi. Mã hoạt động, không có lỗi, vv Tuy nhiên, tệp được tạo dừng lại ngẫu nhiên nửa chừng thông qua các bản ghi. Tôi bước qua mã và các cuộc gọi viết đang làm việc, và phần lạ nhất là giao diện điều khiển in tất cả các hồ sơ tốt, mà NÊN gương các tập tin được tạo ra. Có ai có thể giải thích lý do tại sao các tập tin không phải là kết thúc nhưng giao diện điều khiển là?

Thông tin khác. Tập tin ban đầu là 76 dòng khoảng 36KB. Tôi nghĩ rằng vấn đề là giới hạn bộ nhớ đã đạt đến khi nó dừng lại ở dòng 56 của 76. Tôi tái chạy 56-76 (bây giờ 1-20) và nó dừng lại ở dòng 18. Nó đã cho tôi stumped ...

Trả lời

11

Bạn có thể cần phải đóng FileWriter ở cuối (và tuôn ra để đo tốt).

for(...) { 
    writer.write(row); 
} 
writer.flush(); 
writer.close(); 
+0

Vậy đó. Của nó tuôn ra và gần gũi. Tôi cảm thấy ngớ ngẩn ... –

+1

Không cần phải cảm thấy câm, nó đã xảy ra với rất nhiều người trong chúng ta. Bây giờ bạn biết! – Todd

3

Có lẽ bạn nên cố gắng xóa sạch nhà văn ?? Bạn có thể làm điều đó ở cuối hoặc sau mỗi lần viết - thường bạn làm điều đó ở cuối.

Nếu không xả nước một cách rõ ràng, bạn dựa vào thời gian chạy và hệ điều hành để thực hiện những điều flsuh khi cảm thấy như đã đến lúc thực hiện. Ngoài ra, suối được đỏ ửng khi bạn đóng các dòng sản lượng mà bạn không được làm trong mẫu mã hoặc ...

thử

writer.flush(); 

Và chắc chắn mọi thứ sẽ đóng khi bạn thực hiện.

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