FileReader

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Habe eine Frage bezüglich dem FileReader.

Habe eine Zahl mit dem FileWriter in eine Textdatei (Dateiname.txt) abgespeichert.
Mit dem FileReader soll die Zahl (int) ausgelesen werden. Ich habe in einem Java-Buch die unten angegebene for-Schleife gefunden, jedoch was ich nicht genaus was diese durchführt. Könntet ihr mir bitte diesen Schleifenínhalt erklären...

Code:
FileReader fr= null;
		try {
			fr = new FileReader("Dateiname.txt");
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		}
		
		try {
			for (int c; (c=fr.read() ) !=-1;)                ------------Hier
				System.out.print ((char)c);
		} catch (IOException e1) {
			
			e1.printStackTrace();
		}
 
R

Roar

Gast
Code:
for (int c; (c=fr.read() ) !=-1;)                ------------Hier
	System.out.print ((char)c);

wo ist das problem? im ersten teil wird die variable deklariert, im zweiten wird ihr ein wert zugewiesen und überprüft ob es ungleich -1 ist, der dritte teil bleibt leer... die schleife entsprich dem hier, wenn du das dann einfacher verstehst:

Code:
int c;
while((c = fr.read()) != -1)
	System.out.print ((char)c);
 
G

Guest

Gast
Danke für deine Antwort! Ich Hintergründe sind mir aber noch umbekannt.

Wieso wird der Ausdruck "ungleich -1" verwendet?
Mit dem FileWriter habe ich eine Textdatei erzeugt und in dieser Datei einen Wert (z.B. 1999) gespeichert.


Code:
String Input = JOptionPane.showInputDialog ( "Eingabe bestätigen!");
		Eingabe = Integer.parseInt (Input);
		
		FileWriter fw=null;
		try {
			fw = new FileWriter("Funktionstest.txt");
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		try {
			fw.write( Input);
			fw.close();
		} catch (IOException e1) {
			
			e1.printStackTrace();
		}

Wie wird die Zahl aus der Textdatei jetzt genaus ausgelsen? Wieso Hilft der Ausdruck "ungleich-1" dabei?
Weshal muss ich bei der Ausgabe (char) schreiben? Wird "c" nicht ein Integer-Wert zugeweisen?
Wenn ich das (char) weglasse kommen komische Zahlen... Ergebnis:49575757 (Wenn ich die Zahl 1999 eingebe)
Wenn ich dann der Debugger durchlaufen lasse sehe ich, dass die for-Schleife mehrere male durchlaufen wird
also bei ersten mal wied 49 ausgegeben
dann 57
dann 57
dann 57

Und ich dachte das der Wett einfach ausgelsen wird.
 
G

Guest

Gast
Noch eine Ergänzung;

Code:
for (int c; (c = fr.read ())!=-1; )
			{
			
				System.out.print ((char)c);
				
			
				Schleifeadd = ((char)c);
			
			}



Hier wird "Schleifeadd" einmal der Wert 49 und dann dreimal der Wert 57 zugewiesen, lauf Debugger. (Zahl in Textdatei zum auslesen war 1999).

Die Int-Variable "Schleifeadd" bekommt dann der Wert 57 und nicht 1999. Wieso?
 
B

Beni

Gast
-1, weil ein InputStream -1 zurückgibt, wenn er keine Daten mehr liefern kann.

Einen Integer kann man nicht einfach in einen char umwandeln. Ein Char ist ja die Durchnummerierung aller Zeichen, und da ist der Code von '1' halt leider nicht 1.

Aber du kannst String.valueOf( c ); verwenden, um einen Integer in Text zu verwandeln.
 
R

Roar

Gast
Anonymous hat gesagt.:
Wie wird die Zahl aus der Textdatei jetzt genaus ausgelsen? Wieso Hilft der Ausdruck "ungleich-1" dabei?
Weshal muss ich bei der Ausgabe (char) schreiben? Wird "c" nicht ein Integer-Wert zugeweisen?
Wenn ich das (char) weglasse kommen komische Zahlen... Ergebnis:49575757 (Wenn ich die Zahl 1999 eingebe)
Wenn ich dann der Debugger durchlaufen lasse sehe ich, dass die for-Schleife mehrere male durchlaufen wird
also bei ersten mal wied 49 ausgegeben
dann 57
dann 57
dann 57

Und ich dachte das der Wett einfach ausgelsen wird.

Eine Datei ist eine Anreihung von eines und nullen, 8 von denen stellen eine zahl dar, den ascii wert. und nur weil du im texteditor eine zahl siehst heisst es nicht dass diese zahl auch in der datei steht... und natürlich kann Java auch nicht zauber. und das was die siehst sind halt die ascii werte von den zahlen. und netterweise erzeugt ein typecast von int zu char direkt einen buchstaben aus dem ascii wert...

kapische?
 
G

Guest

Gast
Ok danke!
Aber wie bekomme ich jetzt die Zahl aus der Textdatei in eine Variable?
 
B

Beni

Gast
Code:
FileInputStream in = new FileInputStream( "test.txt" );
    
int text = in.read();
char c = (char)text;
    
int value = Integer.valueOf( Character.toString( c ) ).intValue();

Du kannst dir auch zuerst einen Text zusammenstückeln, und dann umwandeln:
Code:
    FileInputStream in = new FileInputStream( "test.txt" );
    
    int input = in.read();
    StringBuffer buffer = new StringBuffer();
    
    while( input != -1 ){
      buffer.append( (char)input );
      input = in.read();
    }
    
    int value = Integer.valueOf( buffer.toString() ).intValue();
    System.out.println( value );
 
G

Guest

Gast
Danke, jetzt hat es funktioniert!

Ich habe deinen zweiten Lösungsvorschlag genommen, jedoch sind mir einige Dinge unbekannt.

Code:
StringBuffer buffer = new StringBuffer(); 
    
    while( input != -1 ){                 //Diese Zeile hast du mir schon erklärt!!
      buffer.append( (char)input ); 
      input = in.read(); 
    } 
    
    int value = Integer.valueOf( buffer.toString() ).intValue();


Wenn es keine all zu großen Umstände macht, könntest du bitte noch auf die einzelnen Begriffe, die oben aufgeführt sind, eingehen.
 
B

Beni

Gast
Ich nummeriere mal durch
Code:
1:     FileInputStream in = new FileInputStream( "test.txt" );
   
2:    int input = in.read();
3:    StringBuffer buffer = new StringBuffer();
   
4:    while( input != -1 ){
5:      buffer.append( (char)input );
6:      input = in.read();
    }
   
7:    int value = Integer.valueOf( buffer.toString() ).intValue();
8:    System.out.println( value );

1. Der FileInputStream wird ein Byte nach dem anderen von der Datei "test.txt" einlesen.
2. Das erste Byte wird ausgelesen. Sollte die Datei leer sein ist das -1, und die Schlaufe wird nicht durchlaufen.
3. In einem StringBuffer kann man verschiedene Daten als Text speichern. Der StringBuffer hat einige sehr schnelle Methoden, und ist gerade für grössere Texte die noch verändert werden gut geeignet (hier: verändern = Hinzufügen von chars).
4. Die while( condition ){ statments } -Schlaufe. Sie wiederhohlt den Statement-Block solange, bis die condition false ist.
5. Das letzte eingelesene Byte wird in einen char umgewandelt, und im Buffer abgelegt. Wieso char? Weil es ursprünglich (in der Textdatei) ein Char war.
6. Das nächste Byte wird eingelesen.
7. buffer.toString wandelt den Buffer in einen String um. Die Methode gibt einfach den Inhalt aus.
Integer.valueOf wandelt einen String in einen Integer um (Integer ist die sog. Wrapper-Klasse des Datentypes int. Sie umschliesst einen Wert. So kann man auch ints als Objekte verwenden).
Integer.intValue gibt den Wert des Integers als int zurück.
8. Gibt das Ergebnis aus.
 
G

Guest

Gast
Danke für deine ausführliche Erklärung, du hast mir sehr weitergeholfen!!!!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
S Mit FileReader lesen, in ArrayList speichern Java Basics - Anfänger-Themen 4
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
calzone FileReader, lesen ohne die Datei zu überschreiben? Java Basics - Anfänger-Themen 3
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
P FileReader Java Basics - Anfänger-Themen 2
V filereader soll aus config.txt pfade lesen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben