2015-01-22 3 views
5

이것은 나를 미쳤어.Java 파일 쓰기 무작위로 멈 춥니 다?

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"); 
} 

당신이 볼 수 있듯이이 코드는 콘솔에 파일의 레코드를 인쇄뿐만 아니라 : 나는 사본에 csv 파일 및 재 포맷은 준비 자바 배열 형식을 붙여 읽고 다음과 같은 코드가 있습니다 내 사본 붙여 넣기 파일에. 코드는 작동하지만 오류는 없습니다. 그러나 생성 된 파일은 레코드의 중간에 무작위로 멈 춥니 다. 필자는 코드를 밟았으며 쓰기 호출이 작동하고 가장 이상한 부분은 콘솔이 모든 레코드를 잘 인쇄한다는 것입니다.이 파일은 생성 된 파일을 미러링해야합니다. 파일이 끝나지 않은 이유를 설명 할 수있는 사람이 콘솔에 있습니까?

자세한 정보. 초기 파일은 약 36KB 76 줄입니다. 문제는 메모리 제한이 76 줄의 56 줄에서 중단됨에 따라 도달했다고 생각했습니다. 56-76 (현재 1-20)을 다시 실행하고 18 줄에서 멈췄습니다. 그게 저를 곤란하게했습니다 ...

답변

11

마지막에 FileWriter을 닫아야합니다 (좋은 측정을 위해 플러시).

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

그게 전부입니다. 그 플러시와 닫습니다. 나는 지금 벙어리가 느껴진다 ... –

+1

바보 같은 느낌이 들지 않아, 우리에게 많은 일이 일어났다. 이제 알았어! – Todd

3

아마도 작가를 플러시하려고해야합니까 ?? 끝에서 또는 각 글을 끝내고 그것을 할 수 있습니다. 일반적으로 끝에서합니다.

명시 적으로 플러시하지 않으면 실행 시간과 같은 느낌이들 때 런타임과 OS에 의존합니다. 또한,이 완료되면

writer.flush(); 

그리고 확실히 가까운 것을 시도 ... 당신이 중 하나를 샘플 코드에서 수행하지 않는 출력 스트림을 닫을 때 플러시 스트리밍합니다.

관련 문제