2012-02-06 7 views
11

FileWriter를 사용하여 파일에 쓰고 있는데 파일을 삭제 한 후에도 FileWriter가 예외를 throw하지 않는다는 것을 알았습니다.삭제 된 파일에 Java로 작성

정상입니까?

+2

/proc/{pid}/fd/{fid}에서 보면 당신은 (삭제 여부) 열려있는 파일의 내용을 읽기/쓰기 할 수 있습니까? 예를 들어,'rm'을 실행하는 리눅스에서는 파일을 그 경로에서 분리하는 것만으로 파일에 대한 모든 핸들이 없어지면 실제로 삭제 될 것입니다 (아직 열려 있다면 실제로 쉽게 복구 할 수 있습니다). –

답변

15

이 운영 체제에 따라 다릅니다 :

Windows에서
  • , 당신은 일반적으로 열려있는 파일을 삭제할 수 없습니다 것입니다.
  • 유닉스에서 열려있는 파일을 삭제하고 계속해서 파일에 쓰거나 읽는 것은 완벽하게 허용됩니다. 파일을 삭제하면 더 이상 디렉토리 항목을 갖지 않습니다. 그러나 파일이 닫힐 때까지 내용이 디스크에 계속 남아 있습니다. 파일을 참조하는 모든 열린 핸들이 닫히면 OS는 자동으로 디스크 공간을 확보합니다.
1

네, 정상입니다. I/O를 수행하는 기존의 대부분의 방법을 사용하여 파일이 존재하지 않으면이를 작성합니다. 이것은 물론 당신이 을 삭제하기 전에 계류 중이기 때문에 전에 쓰기 시작했습니다.

0

파일이 여러 위치에 나타날 수 있습니다 (하드 링크 포함). 파일을 삭제하면 하드 링크 중 하나만 제거됩니다 (경우에만 해당). 다른 링크가있는 경우 파일에 계속 액세스 할 수 있습니다.

삭제되었지만 열린 파일은 계속 디스크 공간을 차지하며, 충분히 큰 경우 사용 공간이 사용되고 디스크에서 찾을 수있는 모든 파일의 크기가 다를 수 있습니다.

BTW : 당신이에 무엇 OS