2017-10-18 2 views
0

Hier ist der Code, den ich habe:JAVA Object kann nicht aus der Schleife herausfallen

ObjectInputStream ois = null; 
    UserRegistration UR = new UserRegistration(); 



    Scanner pause = new Scanner(System.in); 
    Admin go = new Admin(); 
    try { 

     //ItemEntry book = new ItemEntry(); 
     ois = new ObjectInputStream(new FileInputStream("Account.txt")); 
     while ((UR = (UserRegistration) ois.readObject()) != null) { 
      //if (book.getName().equals("1")) 
      { 
       System.out.println(UR); 
      } 
     } 

    } catch (EOFException e) { 
     System.out.println("\nEnd**"); 

    }catch (ClassNotFoundException ex) { 
     System.out.println(ex.getMessage()); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } finally { 
     try { 
      ois.close(); 
      System.out.println("Press \"ENTER\" to continue..."); 
      pause.nextLine(); 
      go.startup(); 
     } catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 
} 

Wie kann ich es aus der Schleife herausfallen lassen und nicht direkt auf die EOFException einzugeben, wenn es das letzte Objekt erreichen? Hilfe bitte !

+0

Sie werden nicht in den Catch-Block gelangen, bis es keine Ausnahme gibt – Russiancold

+0

Warum müssen Sie die Schleife verlassen? Vielleicht gibt es einen besseren Weg, um das zu erreichen, was du versuchst. –

+0

Ich habe versucht, Ausnahme hinzufügen, aber die Ausgabe bleibt immer noch gleich. Ich kann keine Bewegung nach der while-Schleife machen, weil es direkt zur EOFException geht. –

Antwort

1

Dies ist ein Duplikat dieser Frage:

Java FileInputStream ObjectInputStream reaches end of file EOF

Unterm Strich ist, dass Object nicht null zurückkehrt, wenn das Ende des Stroms erreicht. Stattdessen löst der zugrunde liegende FileInputStream eine EOFException aus. Obwohl Sie dies als das Ende der Datei interpretieren könnten, können Sie eine abgeschnittene Datei nicht unterscheiden. Also, praktisch gesprochen, Object erwartet, dass Sie wissen, wie viele Objekte Sie in lesen.

Um dies zu umgehen Sie eine ganze Zahl zu Beginn der Datei schreiben konnte die angibt, wie viele Userregistrierung Objekte in der Datei sind. Lesen Sie diesen Wert und verwenden Sie dann eine for-Schleife, um diese vielen Objekte zu lesen.

Alternativ können Sie möglicherweise Ihre UserRegistration-Objekte als Array oder anderen Container serialisieren und dann das gesamte Array/Container deserialisieren.