Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to avoid this java.io.IOException: No space left on device

Tags:

java

If my space is full I get sometimes following exception

java.io.IOException: No space left on device
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:282)
        at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1847)
        at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1756)
        at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:230)

Is there any way in Java to avoid this. I mean do not call write if no space

like image 532
Avinash Avatar asked Sep 27 '13 18:09

Avinash


1 Answers

Java 7 NIO offers the FileStore class to check the available size

Path p = Paths.get("/your/file"); // where you want to write
FileSystem fileSystem = FileSystems.getDefault();
Iterable<FileStore> iterable = fileSystem.getFileStores();

Iterator<FileStore> it = iterable.iterator(); // iterate the FileStore instances
while(it.hasNext()) {
    FileStore fileStore = it.next();
    long sizeAvail = fileStore.getUsableSpace(); // or maybe getUnallocatedSpace()
    if (Files.getFileStore(p).equals(fileStore) { // your Path belongs to this FileStore
        if (sizeAvail > theSizeOfBytesYouWantToWrite) {
            // do your thing
        }
    }
}

Obviously you can still get an IOException as nothing is atomic and other processes might be using the same disk, so keep that in mind and handle the exception accordingly.

like image 81
Sotirios Delimanolis Avatar answered Sep 28 '22 08:09

Sotirios Delimanolis