2016-08-29 2 views
2

Ich habe eine neue Datei erstellt, die leer ist. Jetzt, wenn ich es lese, wirft es mich eine EOFException, die unerwünscht ist. Stattdessen möchte ich, dass, wenn die Datei leer ist, würde es andere zwei Funktionen ausführen, die in if(roomFeed.size() == 0) Zustand sind. Ich könnte diese Anweisung in die EOFException catch-Klausel schreiben; Aber das ist nicht das, was ich tun will, denn jedes Mal, wenn die Datei gelesen wird und das Ende der Datei erreicht, wird sie diese Funktionen ausführen. Wenn die Datei Daten enthält, sollte sie das tun, was in else angegeben ist.EOFexception verursacht durch leere Datei

File fileChecker = new File("roomChecker.ser"); 
if(!fileChecker.exists()) { 
    try { 
     fileChecker.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     System.out.println("Unable to create new File"); 
    } 
} 

try(FileInputStream fis = new FileInputStream("roomChecker.ser"); ObjectInputStream ois = new ObjectInputStream(fis)) { 
    roomFeed = (List<roomChecker>) ois.readObject(); 
    System.out.println("End of read"); 
    if(roomFeed.size() == 0) { 
     System.out.println("your in null if statement"); 
     defaultRoomList(); 
     uploadAvailableRooms(); 
    } else { 
     for(int i=0; i<roomNumber.size(); i++) { 
      for(int j=0; j<roomFeed.size(); i++) { 
       if((roomNumber.get(i)).equals(roomFeed.get(i).getRoomNumSearch())){ 
        System.out.println("Reach Dead End for now"); 
       } else { 
        defaultRoomList(); 
        uploadAvailableRooms(); 
       } 
      } 
     } 
    } 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 
+0

Wenn Sie die Datei zum ersten Mal erstellen, schreiben Sie eine leere Liste darauf. – jtahlborn

+0

fileChecker.length() return 0 dann Datei ist leer sonst return> 0 Datei ist nicht leer zwei wenn dann die entsprechenden Methoden für jede –

Antwort

1

All dies:

if(!fileChecker.exists()) { 
    try { 
     fileChecker.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     System.out.println("Unable to create new File"); 
    } 
} 

ist eine Verschwendung von Zeit, und es ist eine von zwei möglichen Ursachen für Ihre leere Datei Problem. Eine Datei nur so zu erstellen, dass Sie sie öffnen können und dann ein anderes Problem bekommen, anstatt das ursprüngliche Problem, dass die Datei nicht da ist, korrekt zu behandeln, ist keine vernünftige Strategie. Stattdessen sollten Sie dies tun:

if (fileChecker.isFile() && fileChecker.length() == 0) { 
    // file is zero length: bail out 
} 

und im folgenden Code, das:

try(FileInputStream fis = new FileInputStream(fileChecker); ObjectInputStream ois = new ObjectInputStream(fis)) { 
    // ... 
} 
catch (FileNotFoundException exc) { 
    // no such file ... 
} 
// other catch blocks as before. 

Natürlich noch Sie EOFException erhalten, wenn Sie die Datei zu Ende lesen, oder wenn die Datei ist unvollständig, und Sie müssen immer noch damit umgehen.

+0

Sorry ... um Sie auf die Antwort Genehmigung warten, wie ich anderen Code zu wickeln hatte vor, um zu sehen, ob Ihre Logik funktioniert ... aber ja, es funktioniert in der Tat .. Was ich getan habe, war Standardbedingungen in ersten wenn Block, wo Sie die Datei mit der Länge Bedingung überprüfen und dann setzen Sie versuchen/catch-Klausel in sonst Bedingung. –

+0

Und keine Sorgen über EOFException es erschien nicht, nachdem ich meinen Code von Ihrer Logik korrigiert..Ich denke, es zeigt immer, wenn die Datei leer war und die Klasse denkt, dass es das Ende der Datei unerwartet erreicht haben .. einmal Die Datei enthält einige Daten, es wird keine EOFException ausgelöst, da sie das Lesen der Datei selbst beendet hat. Vielen Dank für Ihre Hilfe. –

+0

Sie müssen immer noch den Fall berücksichtigen, in dem die Datei unvollständig ist. – EJP

Verwandte Themen