# Eine bestimmte Zeile auslesen



## muloch (11. März 2006)

Ich möchte gerne aus einer textdatei eine spezielle Zeile auslesen. vorher lasse ich per zufallsgenerator eine Zahl ermitteln,z.B die zahl 3  und dann möchte ich die 3.Zeile einer Textdatei auslesen. Könnt ihr mir da helfen


----------



## flashray (11. März 2006)

Hallo ...,

das einfachste wäre: Eine Datei per readline() auslesen, bis du die gewünschte Zeile hast.

Unter den vielen Streamklassen mit denen du eine Datei lesen könntest gibt es auch eine Klasse LineNumberReader die automatisch die Zeilen mitzählt.

Wie man direkt eine bestimmte Zeile lesen könnte weiss ich jetzt nicht. Aber RandomAccesFile wäre ein Versuch wert. Damit kannst du eine Datei an einer gewünschten Stelle lesen oder schreiben. Das Problem hierbei ist, das die Positionsangabe in Bytes und nicht Zeichen oder Zeilen ist.

Vg Erdal


----------



## dadom110 (13. März 2006)

Moin,

hätte die Variante an zubieten es mit readline zu machen, anhand eine Schleife


```
try
		{
			java.io.File ff=new java.io.File("Test.txt");
			FileInputStream inputstream=new FileInputStream(ff);
			InputStreamReader reader=new InputStreamReader(inputstream);
			BufferedReader bff=new BufferedReader(reader);
		
			int zeilennummer=2; //welche Zeile gesucht wird (startet bei 0!)
			int i;
			for (i=0;i<zeilennummer;i++)
			{
				bff.readLine();
			}
			//Zeile die man sucht:
			System.out.println(bff.readLine());
			frame.show();
		} catch (Exception exp) {}
```

Ohne Gewähr und auf eigenes Riskio

Mfg
Dom


----------



## muloch (18. März 2006)

Hi,
danke für eure Antworten.
Tschuldigung dass ich so spät antworte, ich war beruflich für´ne woche ausserhalb tätig.
1. Flashray:
Ich habe sehr wenig erfahrung mit java. Ich besuche die techn.schule und wir sollen ein vokabeltrainer programmieren. min. 50 vokabeln, deu-engl. oder engl.-deu, mit highscoreliste.
da ich tagsüber arbeite und die schule in abendform mache habeich nicht soviel zeit.
ich habe 2 .txt dateien geschrieben für englisch und deutsch, die vokabel sind untereinander.
ich konnte ein 50er array erstellen und die ganzen vokabeln mit einer schleife in die arrays speichern. und danach könnte ich jeweils die per zufallszahl das gewünschte array auslesen und vergleichen.
ich wollte aber lieber nicht alle 50 vakabeln speichern sondern nur die zeile die per zufalls zahl ermittelt wurde.
ich habe in einem Buch die LineNumberReader gelesen und auspobiert, sie liest das ganze datei und nummeriert diese vokabeln.
das RandomAccessFile ist sehr interessant ich glaube, das ist das wonach ich suche. ich  habe leider im buch nicht verstanden wie man es richtig anwendet. 
könntest du mir da helfen? wie kann ich den dateizeiger in eine bestimmte zeile positioniern? und wie lese ich die ganze zeile?

2.dadom110
danke für dein prog
sie gibt mir leider eine fehlermeldung
C:\...............\Vokabeltrainer.java:24: cannot resolve symbol

symbol  : variable frame 

location: class Vokabeltrainer

			frame.show();

                        ^
danke im vorraus


----------



## flashray (18. März 2006)

Hallo muloch,

ich würde dir empfehlen die Daten beim Programmstart vollständig einzulesen und bei Programmende wieder alles zu schreiben.

Erstens wäre es unnötig aufwendig die Daten zeilenweise zu lesen und zu schreiben. Zweitens tut das der Festplatte nicht gut, wenn du ständig irgendwelche Kleinigkeiten liest und schreibst. Dafür ist der Arbeitsspeicher dar.

Für Daten im 10ner oder 100ter Bereich würde ich alles bei Programmstart in eine mehrere Arrays einlesen, und bei Programmende wieder speichern falls sich Wörter geändert oder ergänzt wurden.
Im Tausenderbereich sollte man dann eher auf eine kleine, einfache Datenbank zugreifen.

Somit wäre auch das Problem mit dem Einlesen vermieden. Der rest spielt sich dann nur noch auf Array Ebene ab.

Vg Erdal


----------



## dadom110 (20. März 2006)

Moin zusammen,

hätte es auch auf die Variante gemacht das ganze TextFile ein zu lesen und dann mit dem Arrays zu arbeiten. Bei deiner Fehlermeldung wird es sich so auf den ersten Blick um die zeile gehandelt haben:


```
frame.show();
```

die Zeile hab ich übersehen, weil ich das aus nem alten Programmcode kopiert habe , die Zeile kann entfernt werden. Sollte dann Reibungslos laufen.

Mfg
Dom


----------

