2014-03-03 3 views
2
File file = new File("result.csv"); 
FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
BufferedWriter bw = new BufferedWriter(fw); 

쓰기 완료 후 버퍼링 된 기록기 객체를 닫지 않으면 어떻게됩니까? 우리가 bw.close()를 놓치면 어떻게 될까?Java 버퍼 드 Writer

답변

4

많은 파일을 열어 닫지 않으면 운영 체제에서 잠시 후 더 이상 파일을 열 수 없습니다.

또한 귀하의 BufferedWriter은 가비지 수집되지 않았지만 쓰고 있던 파일은 운영 체제와 관련하여 열린 상태로 유지됩니다. Windows의 경우 파일 핸들이 닫히기 전까지는 BufferedWriter 가비지 수집 중이거나 JVM 종료 중일 때 파일을 삭제할 수 없습니다. 당신이 flush() 잊지 닫고, 파일이 당신이 쓴 모든 텍스트가 없을 수없는, 그래서 만약

  • BufferedWriter.close()는, 기본이되는 스트림에 버퍼를 플러시합니다.

  • BufferedWriter.close() 또한 랩핑 된 작성기를 닫습니다. 이것이 FileWriter 일 때 궁극적으로 FileOutputStream을 닫고 OS에 파일 작성이 완료되었음을 알립니다.

  • 가비지 컬렉터가 자동으로되지 BufferedWriter 또는 포장 FileWriter에 close()를 호출하지만, FileOuputStream에 대한 것입니다. 따라서 OS는 행복 할 것이지만 GC를 기다려야합니다.

  • 그러나 OS 리소스를 더 이상 필요하지 않으면 언제든지 해제하려고합니다. 이것은 열린 파일, 데이터베이스 연결, 인쇄 대기열 ...에 해당됩니다. 이걸 믿어.

  • BufferedWriter.close()은 내부 문자 버퍼를 지우므로 BufferedWriter이 범위 내에있는 동안에도 가비지 수집을 위해 메모리를 사용할 수 있습니다. 자세한 내용

    을위한

확인 here