# datei lesen und in arrays speichern



## lurzi (27. Sep 2011)

hi,

ich hab ein problem mit meiner hausaufgabe. und zwar soll ich ein programm schreiben, was namen zeilenweise aus einer textdatei liest und in einem array speichert. mein code bis jetzt schaut so aus:

```
import java.io.*;

public class Leser
{
   private FileReader f;
   private String[] liste;
   private BufferedReader b;
   

   public Leser(int laenge){
      try{
          this.f= new FileReader("liste.txt");
          }
          catch(FileNotFoundException f){
            System.out.println("Datei nicht gefunden");
          }
      this.b= new BufferedReader(f);
      this.liste = new String[laenge];
   }
   
   public String lesen(int zeile){
        // das soll ja mit b.readLine() gehen, aber wie lese ich zB genau die dritte zeile aus und gebe sie                wieder?
   }
```


----------



## SlaterB (27. Sep 2011)

Suche 'java zeilenweise aus einer textdatei lesen'
->
Zeilenweises Lesen einer Textdatei
und andere,

mit deinen Methodenaufruf wirds schwierig, bleibe lieber bei normaler Schleife und zähle parallel einen Index hoch


----------



## lurzi (27. Sep 2011)

danke, genau die seite hatte ich eben schon offen.
ich habe aber nicht verstanden, wie ich jetzt eine bestimmte zeile auslesen kann oder was genau readLine() überhaupt macht.
habe dazu auch schon gegooglet, nicht wirklich was gefunden. wäre nett, wenn sich eienr die zeit nimmt und das kurz erklärt


----------



## SlaterB (27. Sep 2011)

eine bestimmte Zeile auslesen ist wirklich schwierig, darauf verzichte, das ist gewiss auch nicht gemeint,
wenn du sie erstmal alle in einem Array hast, genau dann hat man das erreicht, dann kann man jederzeit mit beliebigen Index zugreifen,

es ist übrigens auch schon schwer, vorher überhaupt die Anzahl Zeilen zu wissen,
Alternative ist dann eine List mit beliebiger Größe, erst später in festes Array stecken


readLine() liest offensichtlich eine Zeile, was gibts da mehr zu sagen? dass man es in der API noch nachlesen kann,
ansonsten eben in einer Schleife eine Zeile nach der anderen, so geht der Standard



> Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.
> 
> Returns:
> A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached


BufferedReader (Java 2 Platform SE 5.0)


----------



## lurzi (27. Sep 2011)

in der api habe ich auch nachgeschaut, aber mir war und ist immer noch nicht klar wie ich jetzt ZB nur die dritte zeile auslese! es gibt ja schließlich keinen parameter in der methode, mit dem man die zeile angeben kann. readLine() liest doch demnach immer nur die erste zeile, oder nicht?


----------



## SlaterB (27. Sep 2011)

wie gesagt, aber ich habe auch bisschen editiert, deswegen vielleicht übersehen:
readLine() liest immer die nächste, das steht vielleicht nicht explizit da, ist aber doch aus den Beispielen ziemlich ersichtlich
und auch nur EINMAL ausprobieren würde es bestätigen oder widerlegen, ist nicht verboten 

und Komplettquote, mehr kann ich zu dem anderen wirklich nicht mehr neu sagen, glaube es oder bleibe bei deiner Sicht:


> eine bestimmte Zeile auslesen ist wirklich schwierig, darauf verzichte, das ist gewiss auch nicht gemeint,
> wenn du sie erstmal alle in einem Array hast, genau dann hat man das erreicht, dann kann man jederzeit mit beliebigen Index zugreifen,
> 
> es ist übrigens auch schon schwer, vorher überhaupt die Anzahl Zeilen zu wissen,
> Alternative ist dann eine List mit beliebiger Größe, erst später in festes Array stecken


----------



## lurzi (27. Sep 2011)

```
public void lesen(){
     int index = 0;
     while(this.b.readLine() != null){
       liste[index] = this.b.readLine();
       index++;
     }
   }
```
die methode müsste doch eigentlich zeile für zeile in das array speichern, oder habe ich das jetzt falsch verstanden? readLine() wirft aber IOException, deshalb bekomme ich in der schleife einen compilerfehler. was genau bringt diese exception und wie behandle ich sie?

edit: ok, habe das alles einfach in ein try/catch gepackt. somit bekomme ich keinen compilerfehler, aber wie behandle ich die exception?


----------



## Tomate_Salat (27. Sep 2011)

Kommt immer auf das Gebiet drauf an. In deinem Fall würde soetwas reichen:

```
try {
// ... irgendwas was eine IOE schmeißt
} catch(IOException e) {
     e.printStackTrace();
}
```

Die IOException wird z.B. geworfen, wenn die Datei nicht gefunden wird (in so einem Fall würde man in einer Applikation z.B. einen Dialog ausgeben, dass der Benutzer eine neue Datei auswählen soll). Bei dir ist aber alles fest codiert, so dass beim Auftreten dieser Methode du als Programmierer ran musst (=> Im Endprodukt würde man solche Exceptions in einer Datei mitloggen und den Benutzer höflich fragen, ob er diese dem Entwickler zukommen lassen könnte)

*Edit* Du kannst dir auch das mal durchlesen: Exceptions - java-forum.org - FAQ


----------



## SlaterB (27. Sep 2011)

> while(this.b.readLine() != null){
>       liste[index] = this.b.readLine();

die Schleifenbedingung prüfte Zeile 1, ins Array kommt Zeile 2, 
die Schleifenbedingung prüfte Zeile 3, ins Array kommt Zeile 4,
usw., nicht gut

es gibt doch fertige Beispiele, auf der Seite warst du schon..,
wenn zu kompliziert geschrieben, dann eben selben mit Variablen umformulieren


----------

