# Textdatei auslesen - Text anfügen - FileReader



## Guest (2. Mai 2004)

Ich habe folgendes Problem,

in einer txt Datei steht ein Text :

Hallo
du wie geht es dir
mir geht es gut.
Wann ruft du an...

usw

Ich hab mir ein FileReader fertig gemacht


```
String t;
BufferedReader bfr = new BufferedReader ( new FileReader("text.txt"));
while( (t = bfr.readLine()) != null ){
 System.out.print(t);
}
bfr.close();
```

Jedoch liest er nicht die ganze Text Datei aus, nur die erste Zeile, wie kann ich die ganze auslesen.

Ebenso würde ich gerne wissen, wie ich was am Ende anfügen kann.

Danke im voraus


----------



## DP (2. Mai 2004)

System.out.print(t); 

mach mal ein println draus.

cu


----------



## Guest (2. Mai 2004)

Das ist egal, es geht um das null, das wird als ende der Zeile erkannt und es wird kein Zeilenumbruch gemacht


----------



## L-ectron-X (2. Mai 2004)

In Deinem Beispiel liest Du ja auch nur *eine* Zeile ein, wenn es eine gibt.
Das Programm muss aber wissen, dass es eventuell noch weitere Zeilen gibt.

```
try {
   FileReader in = new FileReader("MeinText.txt");
   char[] puffer = new char[4096];
   String str;
   int zeichen;
   while((zeichen = in.read(puffer)) != -1) {
      str =new String(puffer, 0, zeichen);
   }
}
catch(IOException ioe) {
   System.out.println("Fehler beim Lesen");
}
```
Text anfügen geht mit concat(String str) aus String.


----------



## Illuvatar (2. Mai 2004)

Kann es sein, dass du heute schlecht drauf bist, L-ectron-X?


			
				Gast hat gesagt.:
			
		

> ```
> while( (t = bfr.readLine()) != null ){
> ```


Wenn t null ist, ist die letzte Zeile erreicht, solange t nicht null ist --> neue Zeile einlesen.
Das was du mit zeichen machst, macht Gast mit Zeilen.

Warum es nicht funktioniert, weiß ich nicht.


----------



## nudelsalat (2. Mai 2004)

Fals dir das auch noch weiterhilft:


```
import java.io.*;
import javax.swing.*;

public class DateiLesen
{
    public static void main(String[] args){
        String text ="";
        FileReader datei;
        boolean eof =false;
        try{
            String pfad = JOptionPane.showInputDialog(null,"Dateipfad(\"/\" statt \"\\\")");
            datei = new FileReader(pfad +"");    
            while(! eof){
                int t = datei.read();
                if(t == -1)
                    eof = true;
                else{
                    text += (char) t;
                }
            }
        datei.close();
        }catch(Exception e){
            JOptionPane.showMessageDialog(null,"Eingabe fehlerhaft");
        }  
        System.out.println(text);
    }
}
```

Ist leider etwas komplex, funktioniert aber sehr gut.


----------



## L-ectron-X (2. Mai 2004)

@Illuvatar


			
				Illuvatar hat gesagt.:
			
		

> Kann es sein, dass du heute schlecht drauf bist, L-ectron-X?


Hmm, kann schon sein... :? 
Sitze schon 8 Stunden vor meiner Kiste, ich brauch mal ne Pause... :autsch:


----------



## DP (2. Mai 2004)

?! mit out.print ging bei mir auch nur eine zeile. mit println wurde zeile für zeile ausgegeben. kann sein dass ich dich jetzt falsch verstehe, aber in der datei "gibt" es nur ein null - und zwar beim eof. 

cu


----------



## L-ectron-X (3. Mai 2004)

Diese einfache Klasse liest ihren eigenen Quelltext aus einer Datei ein, wenn sie im gleichen Verzeichnis liegt und gibt ihn auf der Konsole wieder aus.

```
import java.io.*;

public class DateiLesen {
  public DateiLesen() {
    try {
      BufferedReader in = new BufferedReader(new FileReader("DateiLesen.java"));
      String str;
      while((str = in.readLine()) != null) {
        System.out.println(str);
      }
    }
    catch(FileNotFoundException fnfe) {
      System.out.println("Datei nicht gefunden!");
    }
    catch(IOException ioe) {
      System.out.println("Fehler beim Lesen!");
    }
  }

  public static void main(String[] args) {
    DateiLesen dl = new DateiLesen();
  }
}
```
Der Code von Gast geht völlig in Ordnung.


----------



## DP (3. Mai 2004)

L-ectron-X hat gesagt.:
			
		

> ```
> import java.io.*;
> 
> public class DateiLesen {
> ...



wie ich sagte...


----------



## Reality (3. Mai 2004)

Kann eigentlich kein Fehler beim Code von Gast erkennen, aber vielleicht geh das:


```
String t;
String ausgelesen="";
BufferedReader bfr = new BufferedReader ( new FileReader("text.txt"));
while( (t = bfr.readLine()) != null ){
ausgelesen= ausgelesen + t;
}
System.out.print(ausgelesen);
bfr.close();
```


----------



## Hektor (1. Jun 2004)

Hallo,

ich hab mal ne Frage, die auch was mit dem Einlesen von Textdateien zu tun hat:

Ich kann nur Dateien einlesen, die sich in meinem jdk-Ordner befinden, nicht aber, so wie ich das gerne hätte, Dateien, die sich im Ordner des Programms befinden. 
Woran liegt das, bzw. kann ich das irgendwie ändern?

Danke


----------



## Maks (2. Jun 2004)

jojo, dann sind wir wieder bei meinem Thema, das ich immer noch nicht so recht lösen konnte.
Hat irgendwas mit der Syntax der FileReader Methode zu tun denke ich, aber genaues...


----------



## meez (2. Jun 2004)

Anonymous hat gesagt.:
			
		

> Ich habe folgendes Problem,
> BufferedReader bfr = new BufferedReader ( new FileReader("text.txt"));



Das sollte eigentlich gehen...Du kannst auch den InputStreamRader verwenden, aber FileReader benutzt den auch...
Sieht ganz so aus, als hätte das File nur eine Zeile....




			
				Hektor hat gesagt.:
			
		

> Woran liegt das, bzw. kann ich das irgendwie ändern?



Gib einfach den richtigen Pfad an, und schau, dass su Leserechte hast...


----------



## Hektor (2. Jun 2004)

leserechte hab ich. den ganzen pfan anzugaben find ich blöd, weil ich das gern davon unabhängig hätt.

hat sonst jemand noch eine idee?

danke


----------



## bygones (2. Jun 2004)

Hektor hat gesagt.:
			
		

> leserechte hab ich. den ganzen pfan anzugaben find ich blöd, weil ich das gern davon unabhängig hätt.


Kann das Problem nicht wirklich nachvollziehen.

Wenn dein Java Programm im Ordner O1 liegt, dann kannst du mit 

```
new FileReader(DATEI)
```
 auf alle dateien in O1 zugreifen
wenn die Datei in einem Unterordner von O1 liegt (O2), dann so

```
new FileReader(O2/DATEI)
```
usw


----------



## Stefan1200 (2. Jun 2004)

Wird dein Java Programm denn auch aus dem Ordner heraus gestartet?


----------



## meez (2. Jun 2004)

Hektor hat gesagt.:
			
		

> leserechte hab ich. den ganzen pfan anzugaben find ich blöd, weil ich das gern davon unabhängig hätt.





Es gibt auch relative Pfade...


----------



## Hektor (3. Jun 2004)

also,

mein programm liegt im ordner a:\o1 und wird da auch ausgeführt.
die datei, die ich ja eigentlich aus o1 einlesen möchte, kann aber nur aus b:\o2 gelesen werden, was neben dem falschen ordner auch noch das falsche laufwerk ist (nur beispiele oben genannt).


----------

