Avinash
Avinash

Reputation: 13257

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

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

Upvotes: 13

Views: 87978

Answers (2)

Scott Heaberlin
Scott Heaberlin

Reputation: 3424

Just look at the File class documentation.

These new methods also include:

public long getTotalSpace()
public long getFreeSpace()
public long getUsableSpace()

Upvotes: 1

Sotirios Delimanolis
Sotirios Delimanolis

Reputation: 280132

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.

Upvotes: 11

Related Questions