2013-09-27 14 views
6

Se il mio spazio è pieno ottengo a volte seguente eccezioneCome evitare questo java.io.IOException: Nessuno spazio esaurito sul dispositivo

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'è un modo in Java per evitare questo. Voglio dire non chiamare scrivere se c'è spazio

+0

un 'blocco try..catch' dovrebbe fare il trucco ... – JNYRanger

+1

java.io.IOException è generico immagino, possono essere gettati per qualsiasi altro motivo Destra !!! – Avinash

+1

Puoi controllare i messaggi. In ogni caso, dovresti assicurarti di avere sempre abbastanza spazio. –

risposta

8

Java 7 NIO offre la classe FileStore per verificare le dimensioni disponibili

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

Ovviamente è ancora possibile ottenere un IOException come nulla è atomico e altri processi potrebbero utilizzare il stesso disco, quindi tienilo a mente e gestisci l'eccezione di conseguenza.

+5

Sui sistemi operativi di tipo Unix, è anche possibile ottenere "Spazio non disponibile sul dispositivo" se si sta tentando di creare un nuovo file e il file system non è in inode. Quindi potresti dover controllare anche gli inode gratuiti. – Kenster

1

Basta dare un'occhiata alla classe File documentation.

Questi nuovi metodi includono anche:

public long getTotalSpace() 
public long getFreeSpace() 
public long getUsableSpace() 
Problemi correlati