2013-09-27 14 views
6

Jeśli moja przestrzeń jest pełna dostaję czasami następujący wyjątekJak uniknąć tego java.io.IOException: Brak miejsca na urządzeniu

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) 

Czy istnieje sposób w Javie, aby tego uniknąć. Znaczy nie nazywaj pisać jeśli nie ma miejsca

+0

od 'try..catch' blok powinno wystarczyć ... – JNYRanger

+1

java.io.IOException jest nazwą rodzajową Chyba może być wyrzucony z jakichkolwiek innych powodów Right !!! – Avinash

+1

Możesz sprawdzić wiadomości. W każdym razie powinieneś upewnić się, że zawsze masz wystarczająco dużo miejsca. –

Odpowiedz

8

Java 7 NIO oferuje klasę FileStore aby sprawdzić dostępny rozmiar

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

Oczywiście nadal można uzyskać IOException jak nic nie jest atomowy i inne procesy mogą być za pomocą ten sam dysk, więc miej to na uwadze i obsłuż wyjątek.

+5

W systemach operacyjnych typu Unix można również uzyskać "Brak miejsca na urządzeniu", jeśli próbujesz utworzyć nowy plik, a system plików jest poza i-węzłami. Więc możesz również sprawdzić wolne i-węzły. – Kenster

1

Wystarczy spojrzeć na klasę pliku documentation.

Te nowe metody obejmują również:

public long getTotalSpace() 
public long getFreeSpace() 
public long getUsableSpace() 
Powiązane problemy