Textfile lesen und schreiben - so viele Möglichkeiten

Status
Nicht offen für weitere Antworten.

mwildam

Mitglied
Bei den ganzen Streams und Reader und Writer bin ich mittlerweile ein bißchen verwirrt und frage mich, wie man denn nun am besten eine Textdatei schreibt bzw. wieder einliest.

Dabei würde ich eher eine Variante bevorzugen, die auch bei größeren Datenmengen noch performant ist. Ich werde außerdem mal UTF-8 und mal ANSI-Ausgabe liefern müssen (bzw. entsprechende Eingaben lesen).

Ich habe da mal zB mit FileOutputStream und OutputStreamWriter gearbeitet und dabei festgestellt dass ich mich selber um richtige Startsequenz bei UTF-8-codierten Textfiles achten muss:
Code:
           char c1 = 239;
            char c2 = 187;
            char c3 = 191;
            String utf8Start = String.valueOf(c1) + String.valueOf(c2) + String.valueOf(c3);
Zumindest unter Windows wird von Notepad ein Textfile sonst nicht richtig als UTF-8 erkannt. Das darf ich natürlich nur schreiben, wenn es ein neues File ist. Wenn an eine bestehende Textdatei angehängt werden soll, dann darf ich das natürlich nicht so ausgeben.

Ich habe aber auch gesehen dass es eine Klasse DataOutputStream gibt, die würde eine Methode writeUTF anbieten. Fragt sich nur, ob das dann in allen Fällen richtig funktioniert - auch wenn ich zB Anhängen will an ein bestehendes File (habe das mit DataOutputStream noch nicht probiert). Die Klasse DataOutputStream muss man außerdem ja mit einem anderen Stream noch kombinieren, sonst tut das ja so nicht.

Ich sehe auf jeden Fall zig Möglichkeiten, wie ich es angehen könnte Textdateien zu lesen und zu schreiben - und wie erwartet zeigt mir Tante Google auch viele verschiedene Möglichkeiten. ???:L
 
G

Guest

Gast
Hey, du bist nicht alleine mit dem Problem!

Habe auch mit Dateien lesen/schreiben angefangen und mir gehts ganz genauso wie dir.
Wenn man sich durch die APIs wühlt steht meistens dabei
-dieser writer ist für char sequenzen gedacht
-dieser für bytes
-etc

naja kurz: die unmengen an writern und input/output streams verwirren, gibt es da vielleicht irgendwo eine nette übersicht oder ähnliches wo man sich schnell einen guten überblick verschaffen kann?
 

mwildam

Mitglied

mwildam

Mitglied
Ich habe hier mal je zwei Beispiele - je ein einfacheres und ein etwas mühsameres, aber es wird ja empfohlen, gepuffert zu arbeiten - zumindest habe ich das in diversen Artikeln über Performance-Optimierung gelesen.
Code:
    private static String testSimpleFileRead2(String fileName)
    {
        StringBuilder contents = new StringBuilder();
        FileInputStream fis = null;
        InputStreamReader in = null;
        BufferedReader buf = null;
        {
            try
            {
                fis = new FileInputStream(fileName);
                in = new InputStreamReader(fis, "UTF-8");
                buf = new BufferedReader(in);
                String s;
                while ((s = buf.readLine()) != null)
                {
                    contents.append(s + System.getProperty("line.separator", "\n"));
                }
            }
            catch (UnsupportedEncodingException ex)
            {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            catch (FileNotFoundException ex)
            {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            catch (IOException ex)
            {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            finally
            {
                try
                {
                    buf.close();
                    in.close();
                    fis.close();
                }
                catch (IOException ex)
                {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return new String(contents);
    }


    private static void testSimpleFileWrite(String fileName, String content)
    {
        //Writes plain ANSI text

        Writer fw = null;

        try
        {
            fw = new FileWriter(fileName);
            fw.write(content);
        //fw.append('\n');
        }
        catch (IOException e)
        {
            //ignore or
            System.err.println("Error writing file");
        } finally
        {
            if (fw != null)
                try
                {
                    fw.close();
                }
                catch (IOException e)
                {
                //ignore
                }
        }
    }

    private static void testSimpleFileWrite2(String fileName, String content)
    {
        //Writes UTF-8 content
        FileOutputStream fos = null;
        OutputStreamWriter out = null;
        BufferedWriter buf = null;
        {
            try
            {
                fos = new FileOutputStream(fileName);
                out = new OutputStreamWriter(fos, "UTF-8");
                buf = new BufferedWriter(out);
                buf.write(content);
            }
            catch (UnsupportedEncodingException ex)
            {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            catch (FileNotFoundException ex)
            {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            catch (IOException ex)
            {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } finally
            {
                try
                {
                    buf.close();
                    out.close();
                    fos.close();
                }
                catch (IOException ex)
                {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
So, das Blöde ist jetzt zB, dass Notepad unter Windows das File noch immer als ANSI-File ansieht, wenn ich testSimpleFileWrite2 verwende - und da habe ich ja UTF-8 angegeben.
 

mwildam

Mitglied
Die Variante testSimpleFileWrite2 liefert ein für Notepad erkennbares UTF-8 nur dann, wenn auch wirklich Zeichen in dem Textfile vorkommen, die über den ANSI-Zeichensatz hinausgehen, also zB Umlaute.

Ich habe gesehen, dass die UTF-8-Header-Zeichen bei dieser Variante nicht mitgeschrieben werden.

Weil jetzt wieder mal Verwirrung in meinem Kopf herrscht, habe ich mal ein bisschen rumprobiert - auch unter Linux.

Ergebnis: OpenOffice schreibt die 3-Zeichen UTF-8-Header mit (unter Windows und Linux), gedit nicht, Notepad unter Windows tut es (wenn man ein neues entsprechendes File erstellt, aber auch wenn man ein UTF-8-Textfile ohne dem Header ändert und speichert).

Also tippe ich mal drauf, man sollte die 3 Zeichen lieber mitschreiben - tut aber keine der hier abgebildeten Varianten von sich aus.

Achtet da sonst keiner drauf oder wie? Bei den Beispielen, die ich so im Internetz gefunden habe (habe mir natürlich nicht wirklich alle angeschaut, aber ein paar halt), scheint da niemand drauf zu achten, obwohl ich aus meinen Tests schließe, dass die 3 Einleitungszeichen geschrieben werden sollten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
L Textfile mit StringTokenizer einlesen und sortiert ausgeben Java Basics - Anfänger-Themen 8
F Textfile auslesen und durchsuchen Java Basics - Anfänger-Themen 13
N User Eingabe mit Zeile aus TextFile vergleichen Java Basics - Anfänger-Themen 13
A Textfile wird nur unvollständig eingelesen Java Basics - Anfänger-Themen 4
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
L Textfile mit BufferReader einlesen Java Basics - Anfänger-Themen 4
A Textfile verarbeiten. Java Basics - Anfänger-Themen 15
M textfile mit java auslesen Java Basics - Anfänger-Themen 4
M if-else-endif in Textfile erkenne Java Basics - Anfänger-Themen 8
M in Textfile Strukturen erkennen Java Basics - Anfänger-Themen 5
M Textfile durchlaufen und ersetzen Java Basics - Anfänger-Themen 2
M in Textfile Textphrase ersetzen Java Basics - Anfänger-Themen 13
P Textfile einlesen Java Basics - Anfänger-Themen 8
S Ringbuffer-Speicher mit einem Textfile Java Basics - Anfänger-Themen 2
H Mit JSP in ein Textfile schreiben Java Basics - Anfänger-Themen 2
H Header von Textfile bearbeiten Java Basics - Anfänger-Themen 14
G Stringmaipulation, Textfile einelsen und Suchen und Ersetzen Java Basics - Anfänger-Themen 12
M Textfile in einer JTextArea anzeigen Java Basics - Anfänger-Themen 3
R Textfile vs Serialized Objects Java Basics - Anfänger-Themen 4
A Abspeichern von werten in einer textfile. Java Basics - Anfänger-Themen 2
G wie 'tabs' und 'zeilenumbruch' in textfile einbauen? Java Basics - Anfänger-Themen 5
G Textfile bearbeiten und speichern Java Basics - Anfänger-Themen 3
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
W Timestamp lesen Java Basics - Anfänger-Themen 6
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
F MS365 Kalender lesen Java Basics - Anfänger-Themen 5
Robin Gentele XML von Webserver lesen und ausgeben Java Basics - Anfänger-Themen 5
H Scripte oder Programmcode aus Datei lesen? Java Basics - Anfänger-Themen 5
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
C Fehlermeldungen lesen Java Basics - Anfänger-Themen 2
S Allgemeine Java Codes lesen und verstehen Java Basics - Anfänger-Themen 7
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
S JSON Datei schreiben und lesen Java Basics - Anfänger-Themen 3
S Java Array Länge aus anderer Klasse lesen Java Basics - Anfänger-Themen 1
G Excle datei aus resources folder finden und lesen Java Basics - Anfänger-Themen 5
J Datei aus Projektfolder lesen Java Basics - Anfänger-Themen 12
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
S Tastatur input lesen Java Basics - Anfänger-Themen 7
S Mit FileReader lesen, in ArrayList speichern Java Basics - Anfänger-Themen 4
B Aus Datei lesen Java Basics - Anfänger-Themen 23
B Aus Datei lesen Java Basics - Anfänger-Themen 0
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
A JSON Lesen und Schreiben. Java Basics - Anfänger-Themen 3
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
C Input/Output Datei aus Startverzeichnis lesen Java Basics - Anfänger-Themen 6
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
G Input/Output Aus txt-Datei lesen, aus Ordner Java Basics - Anfänger-Themen 1
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
G Jar-Archiv zum Lesen einer Konfigurationsdatei Java Basics - Anfänger-Themen 9
MaxG. Input/Output Datei lesen Java Basics - Anfänger-Themen 3
Hacer Quellcode lesen Java Basics - Anfänger-Themen 13
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
N Lesen eines files mit FILES.lines Java Basics - Anfänger-Themen 11
A Private Attribut aus fremder Klasse lesen ? Java Basics - Anfänger-Themen 19
R Ab einer bestimmten Zeile lesen Java Basics - Anfänger-Themen 3
P vokale konsonanten ziffern satzzeichen aus string lesen. hab kiene ahnung Java Basics - Anfänger-Themen 10
A textfeldwerte aus array lesen Java Basics - Anfänger-Themen 27
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
D Methoden Array aus Datei lesen und weitergeben? Java Basics - Anfänger-Themen 7
T 'Nix' aus Textdokument lesen Java Basics - Anfänger-Themen 11
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
E lesen csv file column by column Java Basics - Anfänger-Themen 10
G Bis zu einem bestimmten Punkt aus Datei lesen Java Basics - Anfänger-Themen 2
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
E Input/Output Property-Datei aus einer Zip lesen in in einer anderen Zip-Datei ist Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
I Properties oder Umgebungsvariablen mit ${irgendwas} lesen? Java Basics - Anfänger-Themen 2
D Lesen aus Datei (java.util.NoSuchElementException) Java Basics - Anfänger-Themen 22
D Problem beim Lesen einer txt-Datei Java Basics - Anfänger-Themen 8
G Zeile charweise lesen Java Basics - Anfänger-Themen 3
J Aus Datei lesen und ausgeben Java Basics - Anfänger-Themen 4
N Bestimmte Inhalte aus Datei lesen Java Basics - Anfänger-Themen 11
G Datei zeilenweise lesen Java Basics - Anfänger-Themen 19
M Wie sämtliche Schlüssel und Attibutwerte aus einer Propertie Datei lesen? Java Basics - Anfänger-Themen 3
S Compiler-Fehler jOpenDocument Kompelierfehler - ODS Datei lesen Java Basics - Anfänger-Themen 2
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
T BufferReader soll datei mehrmals lesen Java Basics - Anfänger-Themen 13
G Leere Zeile lesen Java Basics - Anfänger-Themen 12
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
S Datei aus JAR lesen. Java Basics - Anfänger-Themen 9
G Zeilenweise lesen Java Basics - Anfänger-Themen 17
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
B Erst lesen: Automatisch Texteingabe bestätigen Java Basics - Anfänger-Themen 6
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
X Einen Text aus dem Netz lesen?! Java Basics - Anfänger-Themen 3
J Java API lesen lernen Java Basics - Anfänger-Themen 4
Z Problem beim Lesen und Schreiben einer Datei Java Basics - Anfänger-Themen 10
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben