OutputStreamWriter

aaabbb

Mitglied
Hallo,

ich habe ein Array mit Objekten gegeben, die in eine Datei geschrieben werden sollen.
Wie man das mit Streams für Binäre Daten macht, habe ich rausgefunden.
Ich soll die Objekte aber noch mit Hilfe von Reader/ Writer in eine Datei schreiben bzw. daraus lesen.

Ich habe aber folendes Verständnisproblem:
Der Writer schreibt doch alles als Text d.h. Chars in die Datei. Wie soll ich damit dann ein Array mti Objekten in einer Datei sichern und mit Hilfe der Datei das Array mit den Objekten wieder ein lesen?
Habe mal folgenden Code geschrieben. Ich schreibe dabei alle MemberVariablen des Objekt in die Datei und lese sie wieder ein und gebe sie auf dem Bildschirm aus.
Das Array mit den Objekten habe ich so aber ja nicht erzeugt. Geht das überhaupt?
Java:
    void writeStudentsPrintFile(String fileName) {
            try (FileOutputStream fos = new FileOutputStream(fileName);         //Schreibt in Datei (siehe Folie 131)
                OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");  //Codiert
                BufferedWriter bw = new BufferedWriter(osw)) {                  //Puffert
            for (int i = 0; i < students.length; i++) {                     //Läuft alle Student-Objekte im Array ab
                osw.write(students[i].name + students[i].matriculationNo + students[i].inInternship);                 //speichert nacheinander für jedes Studenten-Objekt den Wert der Member als String
                osw.write("...");
            }
        } catch (IOException ioex) {        //Abfangen von Fehlern
            ioex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    //b: Lesen
    void readStudentsPrintFile(String fileName) {
        try (FileInputStream fis = new FileInputStream(fileName);               //Schreibt in Datei (siehe Folie 131)
                InputStreamReader isw = new InputStreamReader(fis, "UTF-8");    //Codiert
                BufferedReader br = new BufferedReader(isw)) {                  //Puffert
           
            int charCount = 0;
            char[] buffer = new char[20];
           
            while (charCount != -1) {               //Ließt so lange aud Datei, bis diese leer (Rückgabewert von "isw.read(buffer)" = -1)
                charCount = isw.read(buffer);       //Schreibt gelesene Buchstaben in buffer
                for(char s : buffer) {              //Gibt Buchstaben in Buffer aus
                    System.out.print(s);
                }
            }
        } catch (IOException ioex) {        //Abfangen von Fehlern
            ioex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
 

Joah

Mitglied
Hi,
habe deinen Code mal überarbeitet.
Du solltest dir aber auch mal serialization anschauen (ObjectOutputStream/ObjectInputStream).
Java:
package pkg;

import java.io.BufferedReader;
import java.util.ArrayList;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;

public class Student
{
    String name;
    boolean inInternship;
    int matriculationNo;

    static Student[] students;

    static void writeStudentsPrintFile(String fileName)
    {
        try
        (
            FileOutputStream fos = new FileOutputStream(fileName);         //Schreibt in Datei (siehe Folie 131)
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");  //Codiert
            BufferedWriter bw = new BufferedWriter(osw) //Puffert
        )
        {
            for (int i = 0; i < students.length; i++)             //Läuft alle Student-Objekte im Array ab
            {
                //speichert nacheinander für jedes Studenten-Objekt den Wert der Member als String
                osw.write(Boolean.toString(students[i].inInternship) + " ");
                osw.write(Integer.toString(students[i].matriculationNo) + " ");
                osw.write(students[i].name + "\n");               
            }     
        }
        catch (Throwable t) // Abfangen von Fehlern
        {
            t.printStackTrace();
        }
    }

    //b: Lesen
    static void readStudentsPrintFile(String fileName)
    {
        try
        (
            FileInputStream fis = new FileInputStream(fileName);               //Schreibt in Datei (siehe Folie 131)
            InputStreamReader isw = new InputStreamReader(fis, "UTF-8");    //Codiert
            BufferedReader br = new BufferedReader(isw)                  //Puffert
        )
        {
            ArrayList<Student> buf = new ArrayList<>();
            while (true)
            {
                String line = br.readLine();
                if (line == null)
                    break;
                int space_1 = line.indexOf(' ');
                int space_2 = line.indexOf(' ', space_1 + 1);
                if (space_1 == -1 || space_2 == -1)
                {
                    System.out.println("parse error\n");
                    return;
                }
                Student s = new Student();
                s.name = line.substring(space_2 + 1);
                s.inInternship = Boolean.parseBoolean(line.substring(0, space_1));
                s.matriculationNo = Integer.parseInt(line.substring(space_1 + 1, space_2));
                buf.add(s);
            }
            students = buf.toArray(new Student[buf.size()]);
        }
        catch (Throwable t)        //Abfangen von Fehlern
        {
            t.printStackTrace();
        }
    }

    public static void main(String [] args)
    {
        students = new Student[3];

        students[0] = new Student();
        students[0].name = "Max Mustermann";
        students[0].inInternship = false;
        students[0].matriculationNo = 123;

        students[1] = new Student();
        students[1].name = "Berlinda Bibber";
        students[1].inInternship = false;
        students[1].matriculationNo = 124;

        students[2] = new Student();
        students[2].name = "Dave Davision";
        students[2].inInternship = true;
        students[2].matriculationNo = 125;

        writeStudentsPrintFile("students.txt");

        students = null;
     
        readStudentsPrintFile("students.txt");
        if (students.length == 3 && students[0].name.equals("Max Mustermann") && students[2].matriculationNo == 125)
            System.out.println("Read OK!");     
    }
}
 

Neue Themen


Oben