2012-05-22 6 views
0

이 메서드는 임의 문자를 써야하지만 아무 것도 쓰지 않습니다. 나는 아마 여기 바보 같은 짓을하고있을거야.하지만 내 인생에서 나는 그것을 찾을 수 없다.내 파일 쓰기 방법이 작동하지 않는 이유는 무엇입니까?

public void writeRandomChunk(String fileName) { 
    try { 
     File saveFile = new File(folderName + '/' + fileName); 

     PrintWriter writer = new PrintWriter(
          new BufferedWriter(
          new FileWriter(saveFile))); 

     Random r = new Random(System.currentTimeMillis()); 

     for (int i = 0; i < chunkSize; i++) { 
      for (int j = 0; j < chunkSize; j++) { 
       writer.print((char)(r.nextInt(26) + 'a')); 
      } 
      writer.println(); 
     } 

    } catch (Exception e) { 
     System.out.println("Error in WorldFile writeRandomFile:\n" 
          + e.getLocalizedMessage()); 
    } 
} 
+0

'PrintWriter'가 버퍼링되었으므로'BufferedWriter'도 필요 없습니다. – EJP

답변

4

모든 스트림과 마찬가지로 (대부분의 언어에 적용됨) 작업을 마친 후 닫아야합니다.

스트림은 빠른 속도로 최적화되어 있으며 결과적으로 스트림에 쓰는 모든 데이터가 즉시 파일에 표시되는 것은 아닙니다. close() 또는 flush() 스트림을 사용하면 데이터가 파일 (또는 사용중인 다른 저장 메커니즘)에 기록됩니다.

귀하의 경우에는 다음을 시도하십시오.

public void writeRandomChunk(String fileName) { 
    PrintWriter writer = null; 
    try { 
     File saveFile = new File(folderName + '/' + fileName); 
     writer = new PrintWriter(
          new BufferedWriter(
          new FileWriter(saveFile))); 

     Random r = new Random(System.currentTimeMillis()); 

     for (int i = 0; i < chunkSize; i++) { 
      for (int j = 0; j < chunkSize; j++) { 
       writer.print((char)(r.nextInt(26) + 'a')); 
      } 
      writer.println(); 
     } 

    } catch (Exception e) { 
     System.out.println("Error in WorldFile writeRandomFile:\n" 
          + e.getLocalizedMessage()); 
    } finally { 
     if (writer != null) 
      writer.close(); 
    } 
} 
1

어느 시점에서 파일을 flush() 또는 close()해야합니다.

+0

오, 이런. 봐, 그게 바보 같은 짓이라는 걸 알았어. 감사! – ChemicalRocketeer

0

작가가 마지막으로 시도한 것을 닫지 않았습니다.

finally { 
    writer.close(); 
} 
0

항상 스트림을 닫아야합니다. 이 패턴을 작가와 함께 사용해보십시오 :

PrinterWriter writer = null; 
try { 
    writer = new PrinterWriter(...); 
    // do your write loop here. 
} catch (Exception e) { 
    // recover from exception. 
} finally { 
    if (writer != null) { 
     writer.close(); 
    } 
}