FileReader

Lukases2

Aktives Mitglied
Ich möchte eine Textdatei mit FileWriter erstellen und diese anschließend lesen. Dazu habe ich folgendes geschrieben:
Java:
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;

public class Text {
	
	
	public void schreiben(String schreibeHierEtwas){
		
		try{
			FileWriter writer = new FileWriter("testing.txt");
			writer.write(schreibeHierEtwas);
			writer.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	
	public String lesen(){
		String s = null;
		FileReader reader = null;
		try{
			reader = new FileReader("testing.txt");
			int c = reader.read();
			while(c != -1){
				s += (char)c;
				reader.read();
			}
			reader.close();
		}catch(IOException e){
			e.getMessage();
		}
		return s;
	}
	
	 public static void main(String[] args) {
		 Text text = new Text();
		 text.schreiben("Ich habe schon alles probiert!");
		 System.out.println(text.lesen());
	 }
}

Ich bekomme keine Fehlermeldung und im Textdokument habe ich auch den entsprechenden Text. Leider bleibt die Konsole einfach leer, wenn ich das Programm starte.
Wenn ich schreibe

Java:
 Text text = new Text();
		 text.schreiben("Ich habe schon alles probiert!");
		 System.out.println("Hallo?");
		 System.out.println(text.lesen());
dann bekomme ich "Hallo?" angezeigt, wenn ich allerdings schreibe
Java:
Text text = new Text();
		 text.schreiben("Ich habe schon alles probiert!");
		 System.out.println(text.lesen());
		 System.out.println("Hallo?");
dann komm auch einfach gar nichts. Woran kann das liegen?
 
Ich nehme an dein Programm bleibt in der Methode "lesen()" in der Schleife hängen.
Schon probiert mal mit dem Debugger auf Fehlersuche zu gehen?
 
Falls du dich nicht mit dem debugger auskennst kannst du auch mehrere ausgaben machen und gucken wo er stehen bleibt, eventuell auch mal alles ausgeben was du einliest.

EDIT: da ich grade nicht selber prüfen kann, habe ich mehrere vermutung die ich nicht testen kann
 
Zuletzt bearbeitet:
Ich kann mit dem Debugger (noch) nicht wirklich umgehen. Was zeigt er mir denn an, wenn da irgendwo ein Fehler ist?
Breakpoints habe ich in Zeile 32,24,25 gesetzt, auf den rechten Seite steht nun [Name, Value]:
this, Text(id=16)
s, null
reader, FileReader(id=17)
c, 87

Ist vielleicht s, null ein Fehler? Denn s müsste ja eigentlich etwas beinhalten, oder?
 
Zuletzt bearbeitet:
Mit dem Debugger kannst du deinen Code Zeile für Zeile ausführen lassen und dir immer wieder anschauen welchen Wert die Variablen angenommen haben usw.
Naja zu Beginn der Methode "lesen()" setzt du den String s auf null, daher passt es schon. Nach dem 1.Schleifedurchlauf sollte s aber nicht mehr null sein.
 
Für s bekomme ich immer wiede den ersten Buchstaben das geschriebenen Strings. Für "Hallo" bekomme ich also "H", dann "HH", "HHH", ... . Irgendwie wird also nicht auf den nächsten Buchstaben übergegangen, sondern der Zeiger bleibt die ganze Zeit auf dem ersten Buchstaben hängen. Was ist also der Fehler?

Edit: Für den Code aus meinem ersten Beitrag würde also immer "I" kommen.
 
Zuletzt bearbeitet:
Für "Hallo" bekomme ich also "H", dann "HH", "HHH", ... . Irgendwie wird also nicht auf den nächsten Buchstaben übergegangen, sondern der Zeiger bleibt die ganze Zeit auf dem ersten Buchstaben hängen. Was ist also der Fehler?

Java:
int c = reader.read();
while(c != -1){
    s += (char)c;
    reader.read();
}

Schau dir deinen Code genau an:
Was fügst du zu dem String s hinzu?
Wo legst du fest was du hinzufügst? Kann sich der Wert den du hinzufügst ändern?
 
Ich habe vergessen, mein c nach jedem Schleifendurchlauf zu ändern. Das führte dann dazu, dass die Schleife nie ein Ende hatte, weil sich eben der Wert nie geändert hat. Richtig müsste es heißen:

Java:
int c = reader.read();
			while(c != -1){
				s = s + (char)c;
				c = reader.read();
			}
 

Zurück
Oben