如何避免这种java.io.IOException:设备上没有剩余空间

时间:2013-09-27 18:15:05

标签: java

如果我的空间已满,我有时会遇到异常

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)

Java中是否有任何方法可以避免这种情况。我的意思是如果没有空间就不要写写

2 个答案:

答案 0 :(得分:9)

Java 7 NIO提供FileStore类来检查可用大小

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
        }
    }
}

显然你仍然可以得到一个IOException,因为没有什么是原子的,其他进程可能正在使用同一个磁盘,所以请记住这一点并相应地处理异常。

答案 1 :(得分:1)

只需查看文件类documentation即可。

这些新方法还包括:

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