# .txt datei "einlesen" und in String speichern!



## myst3ry (31. Aug 2009)

Hallo,

ich bin neu hier im Forum und habe direkt mal eine Frage, ich hoffe ihr könnt mir helfen 

und zwar möchte ich eine .txt datei (in diesem Fall ein Auszug des Grundgesetzes), "einlesen" und in einer String Variable speichern. Dieser String soll dann nach einem bestimmten Zeichen untersucht werden - wie oft kommt dieses Zeichen vor.

Nun habe ich folgendes Problem:
Meine Methode ließt nur die erste Zeile der .txt Datei ein. Ich muss irgendwie eine if abfrage oder so reinbekommen, dass er die nächsten zeilen ebenfalls einließt und in demselben string speichert?
Kann mir jemand sagen wie ich das anstellen soll? 
Wäre echt super!

Der rest des Programms funktioniert in jedem fall, wenn ich nämlich einen String ins programm selbst hineinschreibe und diesen untersuche kommen die richtigen Ergebnisse raus!

Meine Methode lesen() sieht so aus bisher:

```
public void lesen()
    {
        String zeile;
        zeile = "";
        
         try {
                     FileReader filereader = new FileReader ("grundrechte.txt");
                     BufferedReader reader = new BufferedReader (filereader);
                     zeile = reader.readLine(); 
// hier müsste es irgendwie weiter gehen als die erste Zeile
                     text = zeile;
                     reader.close();            
                   }
                   catch (Exception leseFehler){System.err.println(leseFehler);}; 
      }
```
 

Vielen Dank & mfg
myst3ry


----------



## bygones (31. Aug 2009)

bitte immer java tags fuer code verwenden...

du musst natuerlich eine while schleife nutzen ala

```
while ((zeile = reader.readLine()) != null) { ... }
```


----------



## myst3ry (31. Aug 2009)

naja genau DAS verstehe ich irgendwie nicht...
vielleicht liegt das daran dass ich nur einen info grundkurs habe..von der schule aus :lol:


```
public void lesen()
    {
        String zeile;
        zeile = "";
        
         try {
                     FileReader filereader = new FileReader ("grundrechte.txt");
                     BufferedReader reader = new BufferedReader (filereader);
                     while ((zeile = reader.readLine()) != null)
                     {
                         text = zeile;
                         reader.close();
                       }
                  }
                   catch (Exception leseFehler){System.err.println(leseFehler);}; 
      }
```

ich hab die methode jetzt mal so geändert, allerdings kommt dann ne fehlermeldung und er speichert wieder nur die 1. Zeile der .txt datei!

"Fehlermeldung: java.io.IOException: Stream closed"

:--(

jetzt hab ich das thema irgendwie als erledigt markiert... :noe:


----------



## bygones (31. Aug 2009)

das close erst aufrufen nachdem du alles gelesen hast...

ergo aus der while schleife raus

und als tipp: so speichert sich [c]text[/c] immer nur die aktuelle zeile, d.h. am ende hat [c]text[/c] nur die letzte zeile der datei...


----------



## faetzminator (31. Aug 2009)

Da brauchst du aber sowieso zwei Strings - oder von mir bevorzugt einen String und eine List<String>.

... oh habs gerade gesehen. anstatt [c]text = zeile[/c] musst du [c]text = text.concat(zeile)[/c] schreiben. Allenfalls noch ein Trennzeichen einfügen.


----------



## ARadauer (31. Aug 2009)

sorry myst3ry aber da hättest du jetzt auch selber drauf kommen können...

Reader erstellen
eine Zeile lesen
Reader schließen
nächsten Zeile lesen
Fehler ->Stream closed

na was wird da jetzt das Problem gewesen sein....?


----------



## myst3ry (31. Aug 2009)

bygones hat gesagt.:


> das close erst aufrufen nachdem du alles gelesen hast...
> 
> ergo aus der while schleife raus
> 
> und als tipp: so speichert sich [c]text[/c] immer nur die aktuelle zeile, d.h. am ende hat [c]text[/c] nur die letzte zeile der datei...


oh man, sorry für die blödheit..

also..

falls ich es so anstelle:

```
public void lesen()
    {
        String zeile;
        zeile = "";
        
         try {
                     FileReader filereader = new FileReader ("grundrechte.txt");
                     BufferedReader reader = new BufferedReader (filereader);
                     while ((zeile = reader.readLine()) != null)
                     {
                         text = zeile;
                      }
                      reader.close();
                  }
                   catch (Exception leseFehler){System.err.println(leseFehler);}; 
      }
```

dann nimmt er nur die letzte zeile, weil er "text" immerwieder überschreibt.

wenn ich es dann so schreibe:


```
public void lesen()
    {
        String zeile;
        zeile = "";
        
         try {
                     FileReader filereader = new FileReader ("grundrechte.txt");
                     BufferedReader reader = new BufferedReader (filereader);
                     while ((zeile = reader.readLine()) != null)
                     {
                         text = text.concat(zeile);
                      }
                      reader.close();
                  }
                   catch (Exception leseFehler){System.err.println(leseFehler);}; 
      }
```

kommt bei mir die Fehlermeldung "nullpointer expected" und "text" liefert den wert null 


aber vielen vielen dank schonmal!!!  echt spitze


----------



## faetzminator (31. Aug 2009)

Wo hast du text deklariert? Sicher nur mit [c]private String text[/c] anstatt [c]private String text = new String()[/c], oder?


----------



## bygones (31. Aug 2009)

woher kommt [c]text[/c]... gibts die ?


----------



## myst3ry (31. Aug 2009)

alles klar, funktioniert!!!

Ich hab einfach mal 
	
	
	
	





```
text
```
 vorher den wert: 
	
	
	
	





```
" "
```
 gegeben.. 

jetzt nimmt er die ganze .txt datei in den string und ich kann untersuchen, danke 

wow hammer hier :toll::toll::applaus::applaus:


----------



## myst3ry (1. Sep 2009)

Hey, ich bins nochmal...

also ich habe noch ein kleines problemchen. Und zwar sollen wir auch sagen wie oft das Zeichen (statistisch) vorkäme, wenn der Text 100.000 Zeichen lang wäre.
Also ne einfach hochrechnung, die ist auch kein problem.

Wenn ich jetzt aber den String ausgebe in der die ganze .txt Datei eingelesen wurde, dann steht nach jedem Zeichen so ein Symbol das nicht angezeigt werden kann!
so nen viereck.
Dieses symbol wird auch als zeichen gezählt und demnach ist die Hochrechnung natürlich falsch.

Wie bekomme ich das weg?

Jemand eine Idee?
Danke 
myst3ry


----------



## Leroy42 (1. Sep 2009)

myst3ry hat gesagt.:


> ...dann steht nach jedem Zeichen so ein Symbol das nicht angezeigt werden kann!
> so nen viereck.


Und wieso kann das nicht angezeigt werden? ???:L

Poste doch mal einen Teil der Datei; bis dort wo solch ein Zeichen auftritt.


----------



## myst3ry (1. Sep 2009)

Leroy42 hat gesagt.:


> Und wieso kann das nicht angezeigt werden? ???:L
> 
> Poste doch mal einen Teil der Datei; bis dort wo solch ein Zeichen auftritt.



das ist der quellcode:

```
public void lesen()
    {
        String zeile;
        zeile = "";
        text = " ";
        
         try {
                     FileReader filereader = new FileReader ("grundrechte.txt");
                     BufferedReader reader = new BufferedReader (filereader);
                     while ((zeile = reader.readLine()) != null)
                     {
                         text = text.concat(zeile);
                      }
                      reader.close();
                  }
                   catch (Exception leseFehler){System.err.println(leseFehler);}; 
      }
      
      public void gibText()
      {
          System.out.println(text);
       }
```

Zuerst führe ich die Methode lesen() aus, danach die Methode gibText().
Dann erhalte ich folgende Ausgabe:






und in der Textdatei steht an dieser stelle:

Die Würde des Menschen ist unantastbar. Sie zu achten und zu schützen ist...

halt ohne diese "zeichen" nach jedem Buchstaben.

:bahnhof:


----------



## Leroy42 (1. Sep 2009)

myst3ry hat gesagt.:


> Zuerst führe ich die Methode lesen() aus, danach die Methode gibText().
> Dann erhalte ich folgende Ausgabe:



Hääh! ???

Wo erhälst du denn diese Ausgabe, das du sie nur als Image posten kannst?

???:L


----------



## myst3ry (1. Sep 2009)

Wir programmieren über "BlueJ" und die Ausgabekonsole erlaub STRG+C irgendwie nicht, jedenfalls kann ich da nix rauskopieren, deshalb hab ich das bild gemacht.


----------



## Leroy42 (1. Sep 2009)

myst3ry hat gesagt.:


> Wir programmieren über "BlueJ" und die Ausgabekonsole erlaub STRG+C irgendwie nicht



Dann laß das Programm in einer _normalen_ Konsole mittels
Aufruf von *java* laufen.


----------

