Anhängen der Datei führt zum Überschreiben (Java)

Ich erstelle also eine CSV-Datei und möchte bei jeder Aktion die Daten in die Datei schreiben. Das Problem, das ich habe, ist, dass es die Daten überschreibt, wenn es das zweite Mal eingibt. Wie füge ich die Daten am Ende der Datei hinzu?

<code> public boolean save_to_csv(){

    //check if directory exists, if not create the folder
    File folder = new File(Environment.getExternalStorageDirectory() + "/HKA_CAL");
    //Environment.getExternalStorageDirectory() get the location of external storage
    boolean success = true;
    if(!folder.exists())
    {
       success = folder.mkdir();
    }         
    if (success) 
    { 
        //success is true if folder has successfully been created
        //now we can create/check if the file exists

        File stored_hka = new File(Environment.getExternalStorageDirectory()+"/HKA_CAL/Stored_values.csv");
        boolean file_existed=true;

        try{
            if(!stored_hka.exists()){
                stored_hka.createNewFile();
                file_existed=false;
            }
            FileOutputStream fOut = new FileOutputStream(stored_hka);
            OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
            if(!file_existed){
                //if the file did not exist we need to write the titles of the csv
                myOutWriter.append("Calibration Tracking\r\n");
                myOutWriter.append(",ZERO1,,Zero2,,cal1,,cal2,,CALIBRATION FACTORS\r\n");
                myOutWriter.append("Date,Stab,Read,Stab,Read,Stab,Read,Stab,Read,Unit S/N,F Zero,F Offset,F Factor\r\n");
            }
            myOutWriter.append("Date"
                    +","+get_step3_stab()+","+get_step3_read()
                    +","+get_step6_stab()+","+get_step6_read()
                    +","+get_step8_stab()+","+get_step8_read()
                    +","+get_step11_stab()+","+get_step11_read()
                    +","+get_sn_num()+","+get_f_zero()
                    +","+get_f_offset()+","+get_f_factor()+"\r\n"
                    );
            myOutWriter.close();
            fOut.close();
        }
        catch(Exception e){
            return false;
        }




        return true;
    }
    else 
    {
        return false;
    }



}
</code>

Antworten auf die Frage(5)

Veränderung

<code>FileOutputStream fOut = new FileOutputStream(stored_hka);
</code>

zu

<code>FileOutputStream fOut = new FileOutputStream(stored_hka, true);
</code>
<code>FileInputStream("valid path of file", true);
</code>

an, ob Sie eine Datei im Anhänge-Modus öffnen möchten oder nicht.

Wenn Sie Ihre konstruierenFileWriter oderFileOutputStream Es gibt ein Konstruktorargument, mit dem Sie es in den Anhänge-Modus versetzen können:

<code>new FileOutputStream( "/path/to/file", true )
</code>
Lösung für das Problem

Anstatt zu tun

<code>new FileOutputStream(stored_hka);
</code>

tun

<code>new FileOutputStream(stored_hka, true);
</code>

Dadurch wird die Datei geöffnetstored_hka im Append-Modus, anstatt den Inhalt zu überschreiben. Siehe Javadoc fürFileOutputStream (String name, boolean append) für mehr Informationen

 yawnobleix03. Apr. 2012, 22:39
Das scheint zu funktionieren, vielen Dank
 user20742104. Apr. 2012, 01:45
@yawnobleix Es "scheint" auch mit dem Javadoc übereinzustimmen.

Konstrukteur Dazu gehört ein Boolescher Wert zum Anhängen

Ihre Antwort auf die Frage