Mit FileReader lesen, in ArrayList speichern

SpaceToon

Mitglied
Hey Leute,
ich lerne momentan für eine Klausur und habe mir mal folgende zwei Szenarien gedacht:
1) Ich sol aus einer Text-Datei, die z.B. aus 10 Zeilen besteht und in jeder Zeile eine Zahl steht eine Zahl. Anschließend soll will ich diese Werte dann in eine ArrayList speichern. Mein Code dazu:
Java:
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CopyFile {

    public static void main(String[] args) throws IOException {

        FileReader reader = null;
        List<Integer> list = new ArrayList<>();

        try {
            reader = new FileReader("kopiere.txt");
            int c;

            while ((c = reader.read()) != -1) {

                list.add(c);

            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            if (reader != null) {
                reader.close();
            }
        }

        System.out.println(list);
    }

}

So, in meiner Text-File sind die Zahlen 1-10 zeilenweise geschrieben. Wenn ich mir nach dem ganzen die Liste ausgebe, erhalte ich folgende Einträge:

[49, 13, 10, 50, 13, 10, 51, 13, 10, 52, 13, 10, 53, 13, 10, 54, 13, 10, 55, 13, 10, 56, 13, 10, 57, 13, 10, 49, 48]

Wie kann das aber sein? Ich habe doch nur 10 Zeilen und die Zahlen 1 - 10 in der File, ich hätte erwartet, dass die ArrayList auch nur diese anzeigt.

2) Ich möchte aus derselben Datei lesen, die zahlen jeweils mit 2 multiplizieren und anschließend in eine andere Datei schreiben. Mein Code:

Java:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CopyFile {

    public static void main(String[] args) throws IOException {

        FileReader reader = null;
        FileWriter writer = null;
        try {
            reader = new FileReader("kopiere.txt");
            writer = new FileWriter("einfuegen.txt");
            int c;

            while ((c = reader.read()) != -1) {
                int i = Integer.parseInt(String.valueOf(c));
                i = i * 2;
                writer.write(i);

            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                writer.close();
            }
            if (reader != null) {
                reader.close();
            }
        }

    }

}

Das Problem ist, dass ich dann in der Datei "einfuegen.txt" folgenden Eintrag habe:
Das ist ja eigentlich mein Ergebnis, aber nur in Buchstaben (b=2, d=4 etc.)

Wo liegt mein Fehler?
Kann mir jemand mal genau erklären, wie vor allem die while Schleife funktioniert, die werte von c=reader.read() sind doch zufällig oder? Was hat das dann mit dem Zeilenweise auslesen zu tun? Verstehe das Prinzip nicht ganz.
 

Meniskusschaden

Top Contributor
Wie kann das aber sein? Ich habe doch nur 10 Zeilen und die Zahlen 1 - 10 in der File, ich hätte erwartet, dass die ArrayList auch nur diese anzeigt.
Die (10, 13)-Paare sind die Zeilenschaltungen (Carriage Return / Line Feed).
Das ist ja eigentlich mein Ergebnis, aber nur in Buchstaben (b=2, d=4 etc.)
49*2 ergibt 98 und das ist der ASCII-Code von b.
Was hat das dann mit dem Zeilenweise auslesen zu tun?
Gar nichts. Du liest zeichenweise aus.
 

Tarrew

Top Contributor
1). Du kriegst die ASCII-Werte deiner Zahlen und Zeichen wieder.
49 = '1'
13 = Wagenrücklauf
10 = Zeilenumbruch

Dann gehts weiter mit '2' und dem Zeilenumbruch "\r\n" und so weiter.
Die Zahl zu deinem ASCII-Wert kriegste zum Beispiel mit
Java:
Character.getNumericValue(c)
In deinem Fall ist vllt. eher ein BufferedReader sinnvoll, der die ganze Zeile liest:
Java:
    public static void copy() throws IOException {

        FileReader reader = null;
        List<Integer> list = new ArrayList<>();

        try {
            reader = new FileReader("kopiere.txt");

            BufferedReader br = new BufferedReader(reader);
            String line;

            while ((line = br.readLine()) != null) {
                list.add(Integer.parseInt(line));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            if (reader != null) {
                reader.close();
            }
        }

        System.out.println(list);
    }

2).
Ähnliches Problem.
Deine erste Zahl ist 1 (ASCII 49) -> String.valueOf(49) = "49" -> Wird zu int 49 geparsed und verdoppelt (98). Das ist dann der Buchstabe b der zurückgeschrieben wird.

Am besten das Ganze wieder mit der obigen Methode parsen und dann als String zurückschreiben, damit auch Zahlen weggeschrieben werden, die mehr als 1 Zeichen haben:
Java:
 public static void multiplyAndWrite() throws IOException {

        FileReader reader = null;
        FileWriter writer = null;
        try {
            reader = new FileReader("kopiere.txt");
            writer = new FileWriter("einfuegen.txt");
            int c;

            while ((c = reader.read()) != -1) {
                int i = Character.getNumericValue(c);
                i = i * 2;

                writer.write(""+i);
                writer.write("\n");

                //\r\n überspringen
                reader.skip(2);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                writer.close();
            }
            if (reader != null) {
                reader.close();
            }
        }

    }
Diesmal eine andere Variante um den Zeilenumbruch zu überspringen. Ist jetzt ein kleiner Bug drin, weil nur einstellige Zahlen jetzt richtig gelesen werden, aber ich denke, das kriegste auch gelöst ;)
 

Robat

Top Contributor
Dein Reader liest ein char ein und du wandels diesen char in ein int.. Was du da siehst sind nicht die Zahlen sondern der dezimal ASCII Wert (vgl. Ascii Tabelle). 13 10 musste CR LF sein (also der Zeilenumbruch).

Beim schreiben das selbe Problem nur umgekehrt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
calzone FileReader, lesen ohne die Datei zu überschreiben? Java Basics - Anfänger-Themen 3
V filereader soll aus config.txt pfade lesen Java Basics - Anfänger-Themen 6
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
W FileReader - Bitte um Erklärung Java Basics - Anfänger-Themen 7
L FileReader Java Basics - Anfänger-Themen 7
L FileReader Java Basics - Anfänger-Themen 2
D Hilfe bei FileReader und BufferedReader Java Basics - Anfänger-Themen 2
Y Datei mit relativem Dateipfad per FileReader aus .JAR heraus auslesen Java Basics - Anfänger-Themen 4
A FileReader Problem Java Basics - Anfänger-Themen 14
D JFileChooser & FileReader Java Basics - Anfänger-Themen 4
L Input/Output FileReader Pfadangabe Java Basics - Anfänger-Themen 7
L While-Schleife und filereader Java Basics - Anfänger-Themen 5
L FileReader und Filewriter Java Basics - Anfänger-Themen 4
F wo datei für filereader ablegen? Java Basics - Anfänger-Themen 11
M FileReader Zeilenangabe Java Basics - Anfänger-Themen 22
L RandomAcessFile getFilePointer in normalen FileReader Java Basics - Anfänger-Themen 4
H OOP FileReader Einleseergebnis Java Basics - Anfänger-Themen 5
R Von wo nimmt der FileReader seine daten Java Basics - Anfänger-Themen 7
J fileReader: wird dateipfad benötigt? Java Basics - Anfänger-Themen 8
Burny91 FileReader und Writer gleichzeitg nutzen Java Basics - Anfänger-Themen 2
Burny91 FileReader / FileWriter / BufferedWriter An einer bestimmten Zeile String ersetzten Java Basics - Anfänger-Themen 2
F FileReader Frage Java Basics - Anfänger-Themen 3
M Frage zur Klasse FileReader Java Basics - Anfänger-Themen 6
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
Hamstinator Frage zu BufferedReader/FileReader Java Basics - Anfänger-Themen 4
F FileReader Methode Read() int? Java Basics - Anfänger-Themen 2
K FileReader Systempfad Mac Java Basics - Anfänger-Themen 11
hdi FileReader / BufferedReader langsam? Java Basics - Anfänger-Themen 3
A Filereader - An den Anfang des File springen Java Basics - Anfänger-Themen 2
N Pfad und FileReader? Java Basics - Anfänger-Themen 2
S Filereader funktioniert nicht! Fehlersuche Java Basics - Anfänger-Themen 9
K Problem mit .toString und FileReader Java Basics - Anfänger-Themen 2
G filereader Java Basics - Anfänger-Themen 5
G zusätzliche "" bei Pfadangabe z.B. bei FileReader Java Basics - Anfänger-Themen 2
B Problem mit Filereader und filewriter Java Basics - Anfänger-Themen 20
H IOException bei FileReader Java Basics - Anfänger-Themen 3
P BufferedReader / FileReader Key und Values Java Basics - Anfänger-Themen 7
K FileReader BufferedReader & Arrays Java Basics - Anfänger-Themen 14
D Wie funktionieren FileReader Java Basics - Anfänger-Themen 6
M FileReader.read(char[]) - Größe des Arrays? Java Basics - Anfänger-Themen 4
R FileInputStream.read() != FileReader.read(). Pls Help Java Basics - Anfänger-Themen 5
S FileReader-Problem Java Basics - Anfänger-Themen 2
G Textdatei auslesen - Text anfügen - FileReader Java Basics - Anfänger-Themen 18
G FileReader Java Basics - Anfänger-Themen 10
P FileReader Java Basics - Anfänger-Themen 2
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
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

Ähnliche Java Themen

Neue Themen


Oben