Datei Ein und Ausgabe FileWriter und printWriter

aaabbb

Mitglied
Hallo,

mir ist leider der Unterschied der 2 Ausgabemöglichkeiten noch nicht ganz klar.
Im Netz habe ich folgende Unterschiede gefunden:
  1. FileWriter throws IOException in case of any IO failure, this is a checked exception.
  2. None of the PrintWriter methods throws IOException , instead they set a boolean flag which can be obtained using checkError().
  3. PrintWriter has on optional constructor you may use to enable auto-flushing when specific methods are called. No such option exists in FileWriter.
  4. When writing to files, FileWriter has an optional constructor which allows it to append to the existing file when the "write()" method is called.

Aber über das "wie wird geschrieben" steht da nicht wirklich was drin.
Beide schreiben doch einen String in eine Datei.
Und bei beiden kann ich den String wieder einlesen und z.B. mit einem Scanner in andere Datentypen (int, boolean,...) unterteilen.
Gibt es da überhaupt keinen Unterschied?
Bzw. wann verwende ich was?
 
Hallo.

Ein großer Unterschied ist, dass es im PrintWriter ein Konstruktor gibt der ein OutputStream erwartet.
Da ist somit sowas wie möglich:

Code:
PrintWriter w = new PrintWriter(System.out);
w.println("TEST");
w.close();

oder sowas:

Java:
PrintWriter out = response.getPrintWriter();
out.println("Hello World!");

Mit FileWriter ist es nicht möglich da er nur dafür bestimmt ist in einer Datei zu schreiben.

Ansonsten kannst du sicherlich Hier dazu noch was lesen.
 
Danke erstmal.
D.h. beide unterscheiden sich nicht dadurch WAS sie schreiben können, sondern WOHIN sie schreiben können.
________________________
EDIT: Alles unterhalb hat sich erledigt.
Lösung: myScan.useLocale(Locale.US);
________________________
Habe mal folgenden Code geschrieben:
Beim Durchlauf wird mir aber ein Fehler ausgegeben.
Ich vermute, dass das am float liegt.
Die float Zahl wird in die Datei geschrieben, nur das Auslesen funktioniert nicht.
Aber warum, kann ich mit PrintWriter geschriebene floats nicht mehr einlesen?

Java:
 void writeStudentsPrintFilePrintWriter (String fileName) {
        try(PrintWriter pw = new PrintWriter(fileName, "UTF-8")) {
            pw.println(students.length);                    //Schreibt am Anfang der Datei die Zahl der im Array gespeicherten Objekte (greife ich bei "readStudentdsPrintFileShort" wieder auf)
            for (int i = 0; i < students.length; i++) {                         //Läuft alle Student-Objekte im Array ab
                pw.println(students[i].name);                                   //speichert nacheinander für jedes Studenten-Objekt den Wert der Member als String
                pw.println(students[i].matriculationNo);
                pw.println(students[i].inInternship);
                pw.println(students[i].grade);
            }
        } catch (IOException ioex) {        //Abfangen von Fehlern
            ioex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    //b: Lesen
    void readStudentdsPrintFilePrintWriter (String fileName) {
        try (FileInputStream fis = new FileInputStream(fileName);               //Ließt von Datei (siehe Folie 135)
                BufferedInputStream bis = new BufferedInputStream(fis);         //Puffert
                Scanner myScan = new Scanner(bis, "UTF-8")){                    //Scanner ließt von "BufferedInputStream"
            int lengthValue = myScan.nextInt();             //Ließt die Zahl der Objekte ein, die am Anfang der Datei gespeichert wurde (siehe "writeStudentsPrintFileShort")
            myScan.nextLine();                              //Eliminierung des Zeilenumbruchs
            for (int i = 0; i < lengthValue; i++) {                             //Läuft alle gespeicherten Student-Objekte in Datei ab
                String name = myScan.nextLine();                                //Einlesen des Members "name" (Weg von Datei: lesen, codieren, puffern durch fr --> myScan greift auf fr zu und wandelt um in passenden Datentyp)
                int matriculationNo = myScan.nextInt();                         //Einlesen des Members "matriculationNo"
                myScan.nextLine();                          //Eliminierung des Zeilenumbruchs
                boolean inInternship = myScan.nextBoolean();                    //Einlesen des Members "inInternship"
                myScan.nextLine();                          //Eliminierung des Zeilenumbruchs
                float grade = myScan.nextFloat();                               //Einlesen des Members "grade"
//HIER WIRD DER FEHLER AUSGEGEBEN
                myScan.nextLine();                          //Eliminierung des Zeilenumbruchs
           
                students[i] = new Student(name, matriculationNo, inInternship, grade); //Erstellt neues Student-Objekt und schreibt Referenz in Array
            }
        } catch (IOException ioex) {        //Abfangen von Fehlern
            ioex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

Students[] ist ein Array mit Objekten vom Typ Student
(Member Variablen von Student:
String name;
int matriculationNo;
boolean inInternship;
float grade;
)
 
Zuletzt bearbeitet:

Zurück
Oben