2013-01-30 2 views
9

나는 내 프로그램이 최근에 던지기 시작한 오류와 약간 혼동 스럽다.FileInputStream을 닫으면 "No Space Left on Device"오류가 발생할 수 있습니까?

java.io.IOException: No space left on device 
    at java.io.FileInputStream.close0(Native Method) 
    at java.io.FileInputStream.close(FileInputStream.java:259) 
    at java.io.FilterInputStream.close(FilterInputStream.java:155) 

나는 가정하고 그이이 파일이 아닌 실제 디스크, 메모리에 보관되고 있다는 것을, FileInputStream 객체 때문이다. 메모리 수준은 좋아 보이며 디스크 공간도 좋습니다. 이것은 FileInputStream의 종료시에 발생하기 때문에 특히 혼란 스럽습니다. 어떻게 될지에 대한 설명을 해주셔서 감사드립니다.

편집 : 코드

if (this.file.exists()) { 
      DataInputStream is = new DataInputStream(new FileInputStream(this.file)); 
      this.startDate = new DateTime(is.readLong(), this.timeZone); 
      this.endDate = new DateTime(is.readLong(), this.timeZone); 
      is.close(); 
     } 

난 단지, 파일을 여는 일부 콘텐츠를 읽고, 다음 파일을 종료하고 위의 당신이 볼 수 있듯이 검토

합니다.

+0

왜 코드를 붙여 넣을 수 없습니다? – lichengwu

+0

설명을위한 코드가 추가되었습니다. – Judicator

+0

os가 디스크에 액세스 기록 등을 쓰는 중일 수 있습니다. – SpaceTrucker

답변

2

이 경우 IOException은 스트림을 닫는 native 메서드에서 발생합니다.

가 예외를 발생하도록 정의되는 이유는 close 동작을 수행하기 때문이다 최종 flush - IOException 플러시 발생했을 경우 따라서, 발생 될 것이다. 당신은 특정 폴더에 쓰기 권한이 부족할 수

  • :

    당신이받은 예외에 대한 몇 가지 이유가 있습니다.

  • 할당량을 초과했을 수 있습니다.

    if (this.file.exists()) { 
        try { 
         DataInputStream is = new DataInputStream(new FileInputStream(this.file)); 
         this.startDate = new DateTime(is.readLong(), this.timeZone); 
         this.endDate = new DateTime(is.readLong(), this.timeZone); 
        } catch (Exception ex) { 
         // Handle the exception here 
        } finally { 
         is.close(); 
        } 
    } 
    

    당신은 또한 당신이하지 귀하의 경우에는 예외 '원인을 포기하지 않는 IOUtils 방법 closeQuietly를 사용할 수 있습니다

또한 개인적으로 당신이 스트림을 닫는 다음과 같은 방법을 사용하는 것이 좋습니다 파일을 변경하면 close 메소드의 결과에 관심이 없을 것입니다.

편집 :

헨리는 권리입니다. 나는 InputStream을 읽고 내 마음 속에서 자동으로 OutputStream으로 바 꾸었습니다. InputStreamclose 작업은 파일 자체를 변경하지 않고 파일의 metadata을 변경할 수 있습니다

- 같은 마지막 액세스 시간으로, 등

+0

'InputStream'에서 이것을 얻는 것은 여전히 ​​놀라운 일입니다. – Henry

+0

@Henry - 네 말이 맞아. – Michael