Cum să evitați această excepție java.io.IOException: Nu mai există spațiu pe dispozitiv (Programare, Java)

Avinash a intrebat.

Dacă spațiul meu este plin, primesc uneori următoarea excepție

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)

Există vreo modalitate în Java de a evita acest lucru. Adică nu apelați scrierea dacă nu există spațiu

Comentarii

  • a try..catch bloc ar trebui să rezolve problema… –  > Por JNYRanger.
  • java.io.IOException este generic cred, poate fi aruncat din orice alte motive Corect !!!! –  > Por Avinash.
  • Puteți verifica mesajele. În orice caz, ar trebui să vă asigurați că aveți întotdeauna suficient spațiu. –  > Por Peter Lawrey.
  • Nu este practic să evitați în mod fiabil să obțineți această eroare în primul rând. Dacă știți de cât spațiu pe disc aveți nevoie, puteți verifica mai întâi dacă spațiul este disponibil, dar este posibil să primiți totuși eroarea dacă un alt program scrie, de asemenea, un fișier. Majoritatea programelor se descurcă într-un fel sau altul atunci când primesc eroarea. –  > Por Kenster.
2 răspunsuri
Sotirios Delimanolis

Java 7 NIO oferă FileStore clasă pentru a verifica dimensiunea disponibilă

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

Evident, puteți obține în continuare un IOException deoarece nimic nu este atomic și alte procese ar putea utiliza același disc, așa că țineți cont de acest lucru și tratați excepția în consecință.

Comentarii

  • Pe sistemele de operare de tip Unix, puteți obține, de asemenea, „No space left on device” (Nu mai este spațiu pe dispozitiv) dacă încercați să creați un fișier nou și sistemul de fișiere nu mai are inodes. Așadar, este posibil să trebuiască să verificați și dacă există inodes libere. –  > Por Kenster.
Scott Heaberlin

Priviți clasa File .

Aceste noi metode includ, de asemenea,:

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

Tags: