「標準」Java (J2SE 5 以降) を介してハードディスク領域を確実に「割り当て」(予約) する方法はありますか?
たとえば、すべてのスレッドがファイルをダウンロードするスレッド プールで実行されるマルチスレッド アプリケーションの場合を考えてみましょう。ディスク領域の枯渇によってアプリケーションのダウンロードが中断されないようにするには、どうすればよいでしょうか?
少なくとも、ダウンロードしているファイルのサイズを事前に知っている場合、他のスレッドが何をしているかに関係なく、ファイルのダウンロードを保証する何らかの「予約」を行うことができますか?
( StackOverflowにも同様の質問がありますが、マルチスレッドについては説明されておらず、NIO も使用されています。)
編集:さらにテストした後、同様の質問で提案されたソリューションは機能しないようです。これは、基になるハードディスク容量に関係なく、提案された RandomAccessFile アプローチを介して許可された任意の長さを設定できるためです。たとえば、空き容量が数ギガバイトしかないパーティションで、自由に TB (テラバイト!) ファイルを作成できました。
File クラスの getFreeSpace() メソッドが新しいファイルを作成するたびに使用可能なスペースの量が減少したことを報告した場合、解決策は十分でしたが、実際にはそうではなく、実際にはこれらのファイルの長さがゼロであることを確認します。持っているようです。
これらは少なくとも、VMWare Player 4.0.0 で実行されている CentOS 5.6 仮想マシンで見た結果です。