Textdatei einlesen und darin suchen

Doc

Aktives Mitglied
Hallo,
ich bin neu hier Forum, daher erst mal einen Gruß an alle ;-)
Ich bin mit Java nicht besonders erfahren und arbeite gerade an einem kleinen Programm.
Da ich niemand habe, um kleine Problemchen zu besprechen läuft vieles auf try-and-error hinaus.
Ich hab schon relativ viel Zeit investiert mich in Foren einzulesen und Hilfe zu bekommen.
Leider bin ich bisher nicht erfoglreich gewesen.
Daher würde ich mich freuen, wenn ich hier etwas Hilfe bekommen könnte.

Zu meinem Programm:
Ich möchte ein kleines Programm schreiben, das eine Textdatei einliesst.
Danach möchte ich in diesem Text nach Wörtern suchen.

Meine bisherige Idee war, die Datei mit FileReader einzulesen.
Danach wollte ich die Datei mit BufferedReader in einen String zeilenweise einlesen, und danach diesen String durchsuchen.
Ist diese Vorgehensweise grundsätzlich in Ordnung oder gibt es bessere Möglichkeiten?
Kann ich auch die eingelesene Datei direkt durchsuchen? Oder muss das ganze über einen String laufen? Und wenn ja, kann ich die Datei auch Direkt in einen String einlesen (anstatt zeilenweise)?

Hier nun mein bisheriges Programm:

Java:
File datei = new File("Text.txt");
FileReader fr = new FileReader(datei);
BufferedReader br = new BufferedReader(fr); 

String str;	
	
while ((str = br.readLine()) != null) {

	//Hier würde ich gerne zeilenweise aus dem BufferedReader in einen String schreiben,
	//bis die gesamte Textdatei in einem großen String liegt. Der Gedanke war den String str an
	//einen großen String anzuhängen, der nacher den gesamten Text enthält.
	//Leider bisher ohne Erfolg. Wie lässt sich das bewerkstelligen?
	
}

br.close(); 
				
if (text.contains("Wort")){
	System.out.println("gefunden");
}



Vielen Dank im Voraus für die Hilfe.

Grüße,
Doc
 
Zuletzt bearbeitet:

Haave

Top Contributor
Gruß auch an dich :)

Zu deinem Problem: Du kannst in deiner while-Schleife tatsächlich einfach immer wieder die soeben eingelesene Zeile an einen "Sammelstring" dranhängen (formal ist es, soweit ich weiß, zwar immer ein neuer String, der da erstellt wird, aber so ist es anschaulicher). Zum Beispiel so:
Java:
String str = "";
while(true) {
	String in = br.readLine();
	if(in == null) break;
	str = str + in;
}

Die Deklarationen der einzelnen Reader kannst du übrigens auch in einem Aufwasch machen:
Java:
BufferedReader br = new BufferedReader(new FileReader(f)); //f ist ein Objekt der Klasse File
 

Degget

Mitglied
Du könntest die einzelnen Wörter auch in eine ArrayList (oder in eine Hashmap packen, wenn sie nicht doppelt vorkommen sollen) und dann diese durchsuchen. Die Sache mit dem String(in Kombination mit einem StringTokenizer) war zumindest bei mir bei größeren Texten unheimlich langsam. Kann aber auch daran liegen, dass ich es dumm angegangen bin...
 

Doc

Aktives Mitglied
vielen dank! jetzt funktioniert es.

falls jemand noch eine bessere möglichkeit einfällt, würde ich mich über hilfe freuen.
vielleicht gibt es ja noch eine bessere möglichkeit für dieses problem.

danke nochmals!
 

Doc

Aktives Mitglied
ich habs jetzt mit deinem tipp gelöst.

aber mir kommt es etwas umständlich vor den string zeilenweise zu füllen. gibts es nicht die möglichkeit, die textdatei auf einmal in einen string zu schreiben?
 

Appleleptiker

Mitglied
Mir wäre da spontan keine andere Möglichkeit einfallen. Ich habe solche Dinge bisher mit BufferedReadern, ObjectInputReadern, FileInputStreams oder Scannern gelöst - alle machen das schrittweise, wenn nicht sogar alle in Zeilen. Du kannst Dir stattdessen ja auch eine Pseudo-Methode schreiben, welche eine Datei zeilenweise einliest und dann einen kompletten String zurückgibt.
 

nroz

Mitglied
String in einer Schleife zu konkatenieren ist für den Anfang nicht schlimm, aber falls die Datei mal größer wird,
ist es ein Performance-Grab.


Probier es selber:
Java:
public class StringTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		int times = 100000;
		String val = "Hallo";
		System.out.println("StringBuilder: " + buildString(times, val));
		System.out.println("String concatination: " + concatString(times, val));
		
	}
	
	public static long concatString(int times, String val)
	{
		String localVal = "";
		long start = System.currentTimeMillis();	
		for(int i=0;i<times;i++)
		{
			localVal = localVal + val;
		}
		long stop = System.currentTimeMillis();
		
		return stop - start;
	}
	
	public static long buildString(int times, String val)
	{
		StringBuilder localVal = new StringBuilder();
		long start = System.currentTimeMillis();	
		for(int i=0;i<times;i++)
		{
			localVal.append(val);
		}
		long stop = System.currentTimeMillis();
		
		return stop - start;
	}

}
 

Ark

Top Contributor
Ungetestet:
Java:
Scanner sc=new Scanner(
	new BufferedInputStream(
		new FileInputStream(
			new File("/tmp/irgendwo")
		)
	),
	"UTF-8" // alternativ anderer Zeichensatz oder Standardzeichensatz
);

// TODO hier scannen

sc.close();
Ark
 

Doc

Aktives Mitglied
hallo,
danke für eure antworten, aber leider ist mir nicht ganz klar, was ihr mir das gepostet habt.
ich bin wie gesagt nicht sehr erfahren mit java.

@nroz:
ich vermmute es handelt sich um einen perfomance test mit timestamps?

@ark:
was du mir gezeigt hast, versteh ich leider nicht.


leider benötige ich das programm für größere texte. wie könnte ich das problem denn anders lösen?

danke für eure hilfe.
 

nroz

Mitglied
Wenn du einen großen String durch + immer wieder ergänzt/Werte hinzufügst wird das irgendwann sehr langsam.
Um dem zu umgehen solltest du die Klasse StringBuilder verwenden und jede neue Zeile mit append() hinzufügen.

Sobald du dann mit dem String arbeiten willst kannst du die toString()-Methode verwenden.

Java:
	public FileWorker()
	{
		File file = null;
		FileReader fr = null;
		BufferedReader br = null;
		try
		{
			file = new File("myFile.txt");
			fr = new FileReader(file);
			br = new BufferedReader(fr);
			
			StringBuilder sb = new StringBuilder();
			String line;
			while((line = br.readLine()) != null)
			{
				sb.append(line);
				// Zeilenumbruch falls gewünscht, ansonsten die nächste Zeile auskommentieren.
				sb.append("\n");
			}
			
			System.out.println(sb.toString());
			
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				br.close();
				fr.close();
			}
			catch (IOException e)
			{
				// do nothing on exception
			}
		}
	}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
J Textdatei einlesen und ausgeben - NullPointerException Java Basics - Anfänger-Themen 5
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
C Spalte einer Textdatei einlesen Java Basics - Anfänger-Themen 10
C Textdatei einlesen Java Basics - Anfänger-Themen 8
M Textdatei einlesen Java Basics - Anfänger-Themen 3
B Input/Output Textdatei einlesen Windows / Linux Java Basics - Anfänger-Themen 2
F Textdatei einlesen Java Basics - Anfänger-Themen 7
C Textdatei einlesen -> Probleme Java Basics - Anfänger-Themen 3
S Textdatei stückweise einlesen Java Basics - Anfänger-Themen 7
R String einlesen, Textdatei danach durchsuchen und aus Zeile Objekt erzeugen Java Basics - Anfänger-Themen 5
E Textdatei einlesen Java Basics - Anfänger-Themen 7
K Textdatei einlesen funtioniert nicht Java Basics - Anfänger-Themen 8
B Textdatei als String einlesen Java Basics - Anfänger-Themen 3
A Textdatei einlesen Java Basics - Anfänger-Themen 12
W Textdatei einlesen Java Basics - Anfänger-Themen 4
N Textdatei einlesen, Filtern und Splitten Java Basics - Anfänger-Themen 4
G Textdatei einlesen Java Basics - Anfänger-Themen 2
saxman Unicode aus Textdatei einlesen und wieder abspeichern Java Basics - Anfänger-Themen 13
M Textdatei mit unterschiedlicher Spaltenanzahl einlesen Java Basics - Anfänger-Themen 4
B Problem beim einlesen einer Textdatei Java Basics - Anfänger-Themen 3
0 Textdatei in Char[] einlesen ? Java Basics - Anfänger-Themen 3
H Zahlen von Textdatei einlesen Java Basics - Anfänger-Themen 2
Dilandau textdatei einlesen und zeilen sammeln Java Basics - Anfänger-Themen 12
A Textdatei einlesen Java Basics - Anfänger-Themen 32
V Textdatei mit filechooser wählen und dann einlesen Java Basics - Anfänger-Themen 4
G Inhalt einer Textdatei in ein Array einlesen Java Basics - Anfänger-Themen 2
S Textdatei einlesen? Java Basics - Anfänger-Themen 9
R Textdatei einlesen Java Basics - Anfänger-Themen 5
D komplette Textdatei einlesen Java Basics - Anfänger-Themen 15
G Textdatei einlesen Java Basics - Anfänger-Themen 2
O Fehlermeldung bei Einlesen der textdatei. Java Basics - Anfänger-Themen 2
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
S Importieren einer Textdatei Java Basics - Anfänger-Themen 2
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
S Übertragen einer Textdatei in ein 2d-Array Java Basics - Anfänger-Themen 2
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
C Textdatei oder doch eine Datenban Java Basics - Anfänger-Themen 15
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
M Textdatei(en) in .jar schreiben Java Basics - Anfänger-Themen 5
K Textdatei auslesen Java Basics - Anfänger-Themen 10
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
K Erste Schritte Textdatei -> Array Java Basics - Anfänger-Themen 1
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
S Methoden Textdatei auslesen Java Basics - Anfänger-Themen 11
G Textdatei auf Dubletten prüfen Java Basics - Anfänger-Themen 8
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
T Textdatei beschreiben/bearbeiten Java Basics - Anfänger-Themen 4
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
R Werte in eine Textdatei schreiben Java Basics - Anfänger-Themen 20
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
D Textdatei in geschachtelte Array speichern Java Basics - Anfänger-Themen 17
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
M Input/Output Objekte in einer Textdatei ablegen (Highscore) Java Basics - Anfänger-Themen 9
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3
K Input/Output Eingelesenedaten von Scanner als Textdatei ausgeben? Java Basics - Anfänger-Themen 2
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben