2017-11-15 4 views
-1

Dies ist mein saveTable Knopf, der eine Zeile meiner Tabelle speichert und dann in meine Auto.auto Datei legt, aber ich kann nur eine object(row) von Auto type speichern. Jedes Mal, wenn ich ein anderes line(row) speichere, ersetzt es das alte mit dem neuen, so dass ich am Ende nur noch eine object(row of table) in meiner Datei habe, nachdem ich 5 Mal auf die Schaltfläche "Speichern" geklickt habe, während mein Programm läuft. Wie kann ich das lösen? Wie füge ich meiner Datei jedes Mal mehr Objekte hinzu, wenn ich mein Programm starte?

 saveTable.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      int row = Integer.parseInt(textField.getText()); 
      getText.getAuto(row); 
      File tabel = new File("C:\\Users\\Jovan\\Desktop\\Auto.auto"); 
      try { 
       if (!(tabel.exists())) { 
        tabel.createNewFile(); 
       } 
       FileOutputStream fos = new FileOutputStream(tabel); 
       ObjectOutputStream oos1 = new ObjectOutputStream(fos); 
       oos1.writeObject(getText.getAuto(row)); 
       oos1.close(); 


       ObjectOutputStream os2 = new ObjectOutputStream(new FileOutputStream(tabel, true)) { 
        protected void writeStreamHeader() throws IOException { 
         reset(); 
        } 
       }; 

       os2.writeObject(getText.getAuto(row)); 
       os2.close(); 




      } catch (IOException error) { 
       error.printStackTrace(); 
      } 
     } 


    }); 
+0

Was ist 'fos'? Sollte es nicht 'new FileOutputStream (tabel, true);'? –

Antwort

1
new FileOutputStream(tabel, true) 

Der zweite Parameter bedeutet, dass Sie auf diese Datei

public Fileoutputstream (File Datei, boolean append) es statt überschreiben anhängt FileNotFoundException wirft

a Erzeugt Datei-Ausgabestream, um in die Datei zu schreiben, die durch das angegebene File-Objekt repräsentiert wird. Wenn das zweite Argument wahr ist, werden Bytes an das Ende der Datei anstatt an den Anfang geschrieben. Ein neues FileDescriptor-Objekt wird erstellt, um diese Dateiverbindung darzustellen. Zuerst, wenn es einen Sicherheitsmanager gibt, wird seine checkWrite-Methode mit dem Pfad aufgerufen, der durch das Argument file als sein Argument dargestellt wird.

Wenn die Datei existiert, aber ist ein Verzeichnis, anstatt eine reguläre Datei, existiert nicht aber kann nicht erstellt werden, oder kann nicht für anderen Grund geöffnet wird dann ein FileNotFoundException geworfen wird.

Referenz here

Verwandte Themen