Ausgabe als .txt Datei speichern mit FileWriter

Optiplex9020

Mitglied
Hallo ich habe einen Kalender inkl. Jahresplan programmiert und würde gerne die Ausgaben als .txt Datei speichern lassen.
Bislang lasse ich mir die einzelnen Monatsblätter vom typ String mit folgender Methode speichern:
Java:
public static void speichern(String dateiname, String object) throws IOException {
        BufferedWriter lesegeraet = null;
       
        try {
            lesegeraet = new BufferedWriter(new FileWriter(dateiname));
            lesegeraet.write(object+"\n");
            lesegeraet.newLine();
            lesegeraet.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
       
    }// end of methode
Das funktioniert auch soweit, nur leider erfolgt das einlesen dadurch nicht Zeilenweise.
Mein Kalender beinhaltet des Weiteren einen Jahresplaner. Dieser liefert eine Ausgabe als LinkedList welche ich über diese Methode speichere und auch korrekt so abgebildet wird:
Java:
public static void speichern2(String dateiname, LinkedList<String> liste) throws IOException {
       File datei = new File( dateiname);
        BufferedWriter out = null;
       
        // Stream �ffnen
        try {
            out = new BufferedWriter ( new FileWriter(datei));
        } catch (IOException e) {
            System.out.println("Fehler Datei= "+ dateiname +" konnte nicht ge�ffnet werden");
            e.printStackTrace();
        }
       
        // Stream schreiben
        String zeile = null;
       
        // Liste durchlaufen, damit Zeile f�r Zeile geschrieben werden kann
        Iterator<String> it = liste.iterator();
        while( it.hasNext() ){
            zeile = it.next(); // Zeile aus der Liste entnehmen
            try {
                out.write(zeile); // schreiben der Zeile
                out.newLine(); // nicht vergessen!  Newline (NL) schreiben
            //    out.write("\n");
               
            } catch (IOException e) {
                System.out.println("Fehler Datei= "+ dateiname +" konnte nicht geschrieben werden");
                e.printStackTrace();
            }
        }
       
        // Stream schlie�en
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }// end of methode

Hat jemand eventuell einen Tipp wie es meine speichern() Methode ändern kann, dass auch diese Zeilenweise speichert ?
Zudem habe ich ein Problem damit den Jahreskalender zu speichern, da es sich bei der Ausgabe dessen um eine void Methode handelt. Mir wird vorgeschlagen eine Methode speichern3(String, Object) zu erstellen, was ich auch getan habe:
Java:
public static void speichern3(String dateiname, Object object) throws IOException {
        // Stream schlie�en
        try {
            FileWriter lesegeraet = new FileWriter(dateiname);
            lesegeraet.write((int) object);
            lesegeraet.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }// end of methode

Leider funktioniert es damit nicht und mir wird weiterhin vorgeschlagen eine Methode mit (String, Object) zu erstellen.

Der Aufruf erfolgt so:

Java:
case 3:{
                    showHolidays = true;
                    int jahr = this.liesJahr();
                    setHollidays(jahr);
                    this.wochen = liesKopfzeile();
                    this.zeigeJahr(jahr);
                    /Ausgabe.outSpeichern();
                    if (Eingabe.inSpeichern() == 1) {
                        Ausgabe.outSelbstNameWaehlen();
                        if (Eingabe.inSpeichern() == 1) {
                            Ausgabe.outDateinameWaehlen();
                            dateiname = Eingabe.dateinameWaehlen() + ".txt";
                        }
                        else {
                            dateiname = jahr + "_" + "Jahresplan" + ".txt";
                        }
                    try {
                        Speichern.speichern3(dateiname, this.zeigeJahr(jahr));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } 
                    break;   
                }

Es soll diese Methode abgebildet werden:

Java:
@Override
    public void zeigeMonat(int jahr, int monat) {
        Ausgabe.outStringausgabe(getMonatsblatt(jahr, monat));
    }

    @Override
    public void zeigeJahr(int jahr) {
        for (int i = 1; i <= 12; i++) {
            zeigeMonat(jahr, i);
        }
    }
 
Moin,

die Frage wird weniger das Schreiben, als vielmehr das Lesen sein!
Hast Du denn in Deiner Textdatei nach jeder 'Zeile' einen Zeilenumbruch drin ??
Also "0xd" und/oder "0xa" ??
Dann kannst Du bei Lesen jedesmal bis zum Umbruch einlesen und entsprechend verarbeiten!

VG Klaus
 
Sind da nicht ein paar Fehler drin:
Code:
Speichern.speichern3(dateiname, this.zeigeJahr(jahr));
wird doch so nicht gehen weil zeigeJahr(...)
void ist. Meckert er an der Stelle nicht ?

Edit:
nur leider erfolgt das einlesen dadurch nicht Zeilenweise.
Was heisst das ? Das lesen sieht man ja im geposteten Code nicht. Das Schreiben sieht ja einigermassen ok aus, auch wenn du jeden Eintrag mit "\n" und zusätzlich mit newLine() abschliesst ....
 
Zuletzt bearbeitet:

Zurück
Oben