Eine bestimmte Zeile auslesen

muloch

Grünschnabel
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
 
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
 
Moin,

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

Code:
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
 
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
 
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
 
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:

Code:
frame.show();

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

Mfg
Dom
 
Zurück