2013-01-30 3 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の終了時に発生するため、特に混乱します。これがどのように起こる可能性があるのか​​説明してくれてありがとう。

EDIT:コード

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

など、そのような最終アクセス時間など - InputStream

close操作は、ファイル自体は変更されませんが、ファイルのmetadataを変更できますか? – 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メソッドの結果には興味がありません。

EDIT:

ヘンリーは権利です。私はInputStreamを読んで、それを自動的にOutputStreamに変更しました。あなたのコードを貼り付けていない理由を

+0

これを 'InputStream'で取得するのは驚くべきことです。 – Henry

+0

@Henry - そうです。 – Michael