2013-09-27 208 views
6

Nếu không gian của tôi là đầy đủ tôi nhận được đôi khi sau ngoại lệLàm thế nào để tránh java.io.IOException này: Không có không gian còn lại trên thiết bị

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) 

Có cách nào trong Java để tránh điều này. Ý tôi là không gọi viết nếu không có không gian

+0

một 'khối try..catch' nên làm các trick ... – JNYRanger

+1

java.io.IOException là chung chung tôi đoán, có thể được ném cho bất kỳ lý do khác phải !!! – Avinash

+1

Bạn có thể kiểm tra tin nhắn. Trong mọi trường hợp, bạn nên đảm bảo rằng bạn luôn có đủ không gian. –

Trả lời

8

Java 7 nio cung cấp các lớp FileStore để kiểm tra kích thước có sẵn

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

Rõ ràng bạn vẫn có thể nhận được một IOException như không có gì là nguyên tử và các quá trình khác có thể được sử dụng cùng một đĩa, vì vậy hãy ghi nhớ điều đó và xử lý ngoại lệ cho phù hợp.

+5

Trên các hệ điều hành giống Unix, bạn cũng có thể nhận được "Không có không gian còn lại trên thiết bị" nếu bạn đang cố gắng tạo một tệp mới và hệ thống tệp không có inode. Vì vậy, bạn có thể phải kiểm tra inodes miễn phí là tốt. – Kenster

1

Chỉ cần nhìn vào lớp Tệp documentation.

Những phương pháp mới cũng bao gồm:

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