10

私のプログラムが最近スローし始めたエラーと少し混乱しています。

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();
        } 

上記のように、私はファイルを開いて、いくつかのコンテンツを読んでから、ファイルを閉じるだけです。

4

1 に答える 1

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メソッドを使用することもできます。この場合、ファイルを変更しておらず、おそらくメソッドの結果に関心がないからです。closeQuietlyclose

編集:

ヘンリーは正しい。私はそれを読んInputStreamで、自動的に頭の中で に変更しましたOutputStream

でのclose操作InputStreamはファイル自体を変更しませんが、ファイルの を変更できmetadataます (最終アクセス時刻など)。

于 2013-02-06T12:44:18.033 に答える