2012-02-06 17 views
11

ファイルに書き込むためにFileWriterを使用していて、ファイルを削除した後でもFileWriterが例外をスローしないことに気付きました。削除されたファイルへのJavaの書き込み

これは正常ですか?

+2

に見れば、開いているファイル(削除されたりしない)の内容を読み出し/書き込みができますか?例えば、 'rm'を実行しているLinuxでは、ファイルをそのパスから分離するだけで、ファイルへのすべてのハンドルがなくなると実際に削除されます(まだ開いていれば実際に簡単に回復できます)。 –

答えて

15

これは、オペレーティングシステムによって異なります。

Windowsでは
  • 、あなたは通常、開いているファイルを削除することはできないと思います。
  • Unixでは、開いているファイルを削除して書き込みを続ける(またはそこから読み取る)ことは完全に受け入れられます。ファイルを削除すると、ディレクトリエントリはなくなります。ただし、その内容はファイルが閉じられるまでディスク上に存在し続けます。ファイルを参照する開いているハンドルがすべて閉じられると、OSは自動的にディスクスペースを再利用します。
1

はい、正常です。 I/Oを実行する従来の方法のほとんどを使用して、ファイルが存在しない場合は、それを作成します。これはもちろん、を削除して、の前に書いています。

0

ファイルが複数の場所に表示されることがあります(ハードリンクあり)。ファイルを削除すると、ハードリンクの1つが削除されます(可能性があります)。

削除されても開いているファイルは引き続きディスク領域を占有しますが、十分に大きければ、使用されている領域が使用されている可能性があり、ディスク上にあるすべてのファイルのサイズが異なります。

ところで:あなたは、これがオンになっているOSは何/proc/{pid}/fd/{fid}

関連する問題