Datei in String einlesen danach durchsuchen

celloman

Erfahrenes Mitglied
Hallo

Wie kann ich eine Datei in ein string lesen es Danach es auf bestimmte Wörter durchsuchen lassen.

Bitte um Rückmeldung.

MFG
 
Google liefert dir Antworten.... und die Suche hier im Forum sicherlich auch;)
Stichwort Stream. Nur als Denkansatz, vll hilft dir das ja schon
 
Oder schau mal hier
Code:
package de.tutorials;

import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

/**
 * @author tkoehler
 *
 */
public class LeseDatei {
	
	public static Shell shell;
	public static Display display;
	public static Button btn_create;	
	
	/**
	 * Die main-Methode ruft die Methoden auf
	 * und verhindert das sofortige Schließen
	 * des Fensters.
	 * @param args werden nicht benötigt.
	 */	
	public static void main(String[] args)
	{
		createWidgets();
		createListeners();
		
		shell.open();
	    
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) 
				display.sleep();
		}
		display.dispose();
	}		
//-----------------------------------------------------------------------------//
	/**
	 * In dieser Methode werden die Widgets erstellt.
	 * shell.setLocation setzt das Fenster im Verhältnis
	 * zur Auflösung in die Mitte des Displays
	 */
	public static void createWidgets()
	{	
		//---- Fenster ----
		display = new Display();
		shell = new Shell(display);
		shell.setSize(600, 400);
		shell.setLayout(null);
		
		shell.setLocation((int)
				((Toolkit.getDefaultToolkit().getScreenSize().getWidth())/2
						- (shell.getSize().x)/2),
				(int)((Toolkit.getDefaultToolkit().getScreenSize().getHeight())/2 
						- (shell.getSize().y)/2));
		
		//---- Buttons ----
		btn_create = new Button(shell, SWT.PUSH);
		btn_create.setBounds(20, 20, 100, 25);
		btn_create.setText("lese Text");		
	}	
//-----------------------------------------------------------------------------//	
	/**
	 * Erstellt die Listener für die Widgets.
	 * Listener für btn_create 
	 * ruft die Methode leseDatei() auf.
	 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
	 */
	public static void createListeners()
	{
		btn_create.addListener(SWT.Selection, new Listener()
		{
			public void handleEvent(Event arg0) 
			{
				leseDatei();
			}
		});
	}	
//-----------------------------------------------------------------------------//
	/**
	 * Die Methode leseDatei() lädt die Datei lorem.txt in den Input
	 * und kopiert den Text in die Variable text. Danach wird per 
	 * StringTokenizer das nächste Wort mit "Lorem" verglichen. 
	 * Wenn true, dann i um 1 erhöhen. Nach der Schleife ausgeben.
	 * 
	 */
	public static void leseDatei()
	{
		String text = "";
		try 
		{
			BufferedReader input = new BufferedReader(new FileReader("lorem.txt"));
			String line;

			while ((line = input.readLine()) != null) {
				text = text + '\n' + line;
			}
			if (text.endsWith("\n"))
				text = text + "\n";

			input.close();
			
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		
		StringTokenizer st = new StringTokenizer(text);
		int i = 0;
		while(st.hasMoreTokens())
		{
			if(st.nextToken().equals("Lorem"))
			{
				i++;
				st.nextToken();
			}
		}
		System.out.println("In der Datei ist das Wort Lorem " + i + "mal enthalten");
		
	}

}
 
Zuletzt bearbeitet von einem Moderator:
Hy Tobi

Kannst du mir vielleicht sagen wie ich eine .txt Datei sortieren Kann.

Der Inhalt sieht so aus:

Part: 1 (47)
-3.605202648226e-001 -9.327513809436e-001 0.000000000000e+000
9.327513809436e-001 -3.605202648226e-001 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
8.330508804029e-021 5.711266338201e-021 0.000000000000e+000
Part: 1 (59)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
-6.123031769112e-021 4.476963182155e+001 6.123031769112e-021
Part: 2 (59 39)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
0.000000000000e+000 0.000000000000e+000 0.000000000000e+000
Part: 2 (59 41)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
0.000000000000e+000 0.000000000000e+000 0.000000000000e+000
Part: 2 (59 43)
9.914069416794e-001 -7.411259383905e-017 1.308138983052e-001
0.000000000000e+000 -1.000000000000e+000 0.000000000000e+000
1.308138983052e-001 0.000000000000e+000 -9.914069416794e-001
0.000000000000e+000 1.040000000000e+001 0.000000000000e+000
Part: 1 (62)
9.673187481361e-001 2.535634821980e-001 0.000000000000e+000
-2.535634821980e-001 9.673187481361e-001 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
1.305851933321e+001 -5.047283707516e+000 0.000000000000e+000
MaFrame 1
Part: 1 (47)
-5.019961254070e-001 -8.648698688684e-001 0.000000000000e+000
8.648698688684e-001 -5.019961254070e-001 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
9.196769992950e-021 5.295625683229e-021 0.000000000000e+000
Part: 1 (59)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
-6.123031769112e-021 4.302870001717e+001 6.123031769112e-021
Part: 2 (59 39)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
0.000000000000e+000 0.000000000000e+000 0.000000000000e+000
Part: 2 (59 41)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
0.000000000000e+000 0.000000000000e+000 0.000000000000e+000
Part: 2 (59 43)
9.914069416794e-001 -7.411259383905e-017 1.308138983052e-001
0.000000000000e+000 -1.000000000000e+000 0.000000000000e+000
1.308138983052e-001 0.000000000000e+000 -9.914069416794e-001
0.000000000000e+000 1.040000000000e+001 0.000000000000e+000
Part: 1 (62)
9.719689857615e-001 2.351091038598e-001 0.000000000000e+000
-2.351091038598e-001 9.719689857615e-001 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
1.210817816416e+001 -7.027945755698e+000 0.000000000000e+000

Den Inhalt möchte ich sortieren so zum Beispiel

Part: 1 (47)
-3.605202648226e-001 -9.327513809436e-001 0.000000000000e+000
9.327513809436e-001 -3.605202648226e-001 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
8.330508804029e-021 5.711266338201e-021 0.000000000000e+000
Part: 1 (47)
-5.019961254070e-001 -8.648698688684e-001 0.000000000000e+000
8.648698688684e-001 -5.019961254070e-001 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
9.196769992950e-021 5.295625683229e-021 0.000000000000e+000

Part: 1 (59)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
-6.123031769112e-021 4.476963182155e+001 6.123031769112e-021
Part: 1 (59)
1.000000000000e+000 0.000000000000e+000 0.000000000000e+000
0.000000000000e+000 1.000000000000e+000 0.000000000000e+000
0.000000000000e+000 0.000000000000e+000 1.000000000000e+000
-6.123031769112e-021 4.302870001717e+001 6.123031769112e-021


usw.

Kannst du mir dabei ein Tipp geben

MFG
 
Mit sortieren kenn ich mich nicht so gut aus, aber du könntest das per ArrayLists lösen. Also die Datei durchsuchen, für jeden Part ne ArrayList erstellen und diese dann sortieren mit
Java:
Collections.sort(list, Collator.getInstance());
System.out.println(list);
 
Zuletzt bearbeitet von einem Moderator:
Oder schau mal hier
Code:
....

	public static void leseDatei()
	{
		String text = "";
 		try 
		{
			BufferedReader input = new BufferedReader(new FileReader("lorem.txt"));
			String line;

			while ((line = input.readLine()) != null) {
				text = text + '\n' + line;
			}
			if (text.endsWith("\n"))
				text = text + "\n";

			input.close();
			
		} 
	...

	}

Bei solchen Schleifen-Konstrukten würde ich besser mit StringBuffer arbeiten, da String immutable ist, es wird also bei jeder +-Operation ein neues String-Objekt erzeugt:
Code:
StringBuffer text = new StringBuffer("");

...
while ((line = input.readLine()) != null) {
        text.append('\n').append(line);
}
...

Gruß
Peter
 
Hy Peter

soll ich den ganzen Text in ein string laden oder meinst du jeden Part in ein extra string und dann sortieren.

MFG
 
@celloman:
Ich möchte ja kein Spielverderber sein, aber vielleicht solltest Du bei einem Thread bleiben. Hier hast Du auch schon danach gefragt und zerix hat Dir bereits einen Hinweis mit nem Vector gegeben, Tobi jetzt mit ner ArrayList.

Beispiel:
Du liest ein. Dann steht Part(...) in dem String. Diesen String und alles was danach kommt schreibst du in einen Vector. Wenn du dann wieder Part(...) einliest, schreibst du das und alles was danach kommt in einen anderen Vector. Das dann so lange weiter, bis die Datei zu ende ist. Dann hast du alles in "Blöcken" und kannst machen was du willst.

Die allgemeine vorgehensweise ist bei beiden gleich.
- einlesen bis part vollendet
- neuen Vector/ArrayList aufmachen und bis Partende füllen
- einzelne Vector/ArrayLists sortieren lassen
- neu ausgeben / in Datei schreiben
 
soll ich den ganzen Text in ein string laden oder meinst du jeden Part in ein extra string und dann sortieren.

Mein Posting bezog sich nur auf das vorgeschlagene Schleifen-Konstrukt, wegen der Programmier-Hygiene :). Ob es Sinn macht, den ganzen File in einen String einzulesen, und dann den String zu zerlegen, bezweifele ich.

Ich kenne dein Sortierkriterium nicht, denke aber, es macht Sinn, die Zerlegung in die zu sortierenden Abschnitte schon beim Einlesen vorzunehmen und die Abschnitte dann in einer TreeMap abzuspeichern. Keys wären dann vermutlich die Teil-Strings, die das Token enthalten, gemäß dem sortiert werden soll (wenn ich mir deinen file so angucke, nehme ich mal an, die Keys sind keine reinen Zahlen). Dafür müßtest du dann aber vermutlich noch einen Comparator<String> implentieren.

Gruß
Peter
 
Zurück