java.io.IOException: No Space Left on Device in Java を修正
今日は、Java でのプログラミング中に発生する java.io.IOException: No space left on device
エラーの原因を突き止めます。 さらに、このエラーを解消するための可能な解決策についても学びます。
java.io.IOException: No space left on device
エラーの原因と考えられる解決策
エラーを理解し、その理由を見つけるためのシナリオを考えてみましょう。 大量のデータをファイルに書き込むプログラムがあるとしますが、しばらくするとデバイスに空き領域がありません
というエラーに直面します。
これは、この特定のディスクに保存されたファイルに必要なすべてのデータを書き込むのに十分なディスク領域がデバイスにないことを意味します。 通常、多数のページが作成されている大規模なインスタンスを操作しているときに発生します。
このエラーを解決するにはどうすればよいですか? 解決策の一部を以下に示します。
解決策 1
Java 7 Java New Input/Output (NIO) は、書き込みに十分なスペースを確保するために使用できる FileStore
クラスを提供します。 以下は、その使用方法を示すコード例です。
// write the path where you want to write
Path path = Paths.get("/yourPath/fileName");
FileSystem fileSystem = FileSystems.getDefault();
Iterable<FileStore> iterable = fileSystem.getFileStores();
// iterate over the instances of FileStore
Iterator<FileStore> iterator = iterable.iterator();
while (iterator.hasNext()) {
FileStore fileStore = iterator.next();
// you may be able to use or getUnallocatedSpace()
// instead of getUsableSpace() method
long sizeAvail = fileStore.getUsableSpace();
// your given Path belongs to this specific FileStore
if (Files.getFileStore(path).equals(fileStore) {
if (sizeAvail > theSizeOfBytesYouWantToWrite) {
// do your stuff
} // end if
}//end if
} // end while
何もアトミックではないため、おそらくまだ IOException
に直面する可能性があります。 他のプロセスが同じディスク上のデータを使用および保存している可能性があります。
そのため、そのことを念頭に置いて、状況に応じて例外を処理することが重要です。
解決策 2
try-catch
ブロックは、スペースがなくなった場合に書き込みを停止する方法で処理したい場合にも、このトリックを実行できます。
そもそもこのエラーが発生しないようにすることは現実的ではないことに注意してください。 必要なディスク容量がわかっている場合は、まず必要な容量が利用可能かどうかを確認できます。
繰り返しになりますが、他のアプリケーションが同じディスクに書き込みを行っている場合、このエラーに直面する可能性があるため、このタイプのエラー処理は、このエラーの原因となっている状況によって異なります。 ほとんどのアプリケーションは、このエラーに直面したときに何らかの方法で対処します。