Supportnet / Forum / Anwendungen(Java,C++...)
Java: .txt-Datei lesen und bearbeiten
Frage
Frohes neues Jahr!
Wie kann man unter Java eine Textdatei einlesen und z.B. Unterschiedliche Wörter zählen?
Wie kann man die Datei auf dem Bildschirm ausgeben?
Ich habe bis jetzt eine Möglichkeit gefunden, das erste Wort aus einer Datei zu lesen:
public void dateiEinlesen(String datei) throws FileNotFoundException, IOException
{
BufferedReader test =
new BufferedReader(new FileReader(datei));
String tmp = test.readLine();
System.out.print(tmp);
}
Aber wie kann ich die gesamte Datei auslesen?
Xavier
Antwort 1 von Xavier
Keiner einen Vorschlag?
Vielleicht einen Link wo man das nachlesen kann?
Vielleicht einen Link wo man das nachlesen kann?
Antwort 2 von mr_x_hacker
Naja, test.readLine() liest eine Zeile... machst du das nochmal, liest er noch eine :-)
Also z.B.
liest jede Zeile in einen String ein...
Damit kannst Du dann irgendwas machen, z.B. ein Array von Zeilen erstellen, oder alle Zeilen zu einem String zusammensetzen, oder...
Zum Wörter zählen wird es wohl reichen, erstmal die Leerzeichen pro Zeile zu zählen, solang niemand mehrere Leerzeichen hintereinander benutzt.
Ciao Sascha
Also z.B.
String input = "";
while((input = test.readLine()) != null) {
//... irgendwas mit der Zeile machen
}liest jede Zeile in einen String ein...
Damit kannst Du dann irgendwas machen, z.B. ein Array von Zeilen erstellen, oder alle Zeilen zu einem String zusammensetzen, oder...
Zum Wörter zählen wird es wohl reichen, erstmal die Leerzeichen pro Zeile zu zählen, solang niemand mehrere Leerzeichen hintereinander benutzt.
Ciao Sascha
Antwort 3 von Xavier
Naja, es soll eigentlich gezählt werden, wie oft jedes Wort darin vorkommt...
Das wollte ich dann tabellarisch ausgeben...
aber Danke erstmal!
Das wollte ich dann tabellarisch ausgeben...
aber Danke erstmal!
Antwort 4 von mr_x_hacker
Für den Job würde ich einfach alle Zeilen zu einem großen String zusammenbauen:
Dann brauchst halt eine Methode analyzeMyFile() die in diesem String die Wörter erkennt und zählt, wie Du es gerne hättest, aber die Frage war ja nur nach dem Einlesen ;-)
Ciao Sascha
String fullFile = "";
String input = "";
while((input = test.readLine()) != null) {
fullFile += input;
}
analyzeMyFile(fullFile);
Dann brauchst halt eine Methode analyzeMyFile() die in diesem String die Wörter erkennt und zählt, wie Du es gerne hättest, aber die Frage war ja nur nach dem Einlesen ;-)
Ciao Sascha
Antwort 5 von semi
Hier ein naiver Ansatz
Gruß,
Michael
import java.util.HashMap;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class CountWords
{
public static void main(String argv[])
{
BufferedReader in = null;
try
{
in = new BufferedReader(
new InputStreamReader(System.in), 2048
);
StringBuffer buffer = new StringBuffer();
String line;
while((line=in.readLine())!=null)
buffer.append(line).append('\n');
class Amount {
int value = 0;
}
HashMap words = new HashMap();
StringTokenizer st = new StringTokenizer(buffer.toString());
while(st.hasMoreTokens())
{
String word = (String)st.nextToken();
Amount n = (Amount)words.get(word);
if(n==null)
{
n = new Amount();
words.put(word, n);
}
n.value++;
}
Iterator i = words.keySet().iterator();
while(i.hasNext())
{
String word = (String)i.next();
System.out.println(word + " = " + ((Amount)words.get(word)).value);
}
}
catch(IOException e)
{
System.err.println("Fehler beim Lesen von der Standardeingabe.");
}
finally
{
if(in!=null) try { in.close(); } catch(Exception e) {/*who cares*/}
}
}
}
Gruß,
Michael
Antwort 6 von Xavier
Habe das Script ausprobiert, lässt sich auch compilieren, aber wenn ich den Code richtig verstehe, soll die Eingabe abgebrochen werden, wenn nichts eingegeben wird, sprich: wenn nur enter gedrückt wird, aber das funzt nicht :(
Hab ich das falsch verstanden oder ist da ein Fehler?
Hab ich das falsch verstanden oder ist da ein Fehler?
Antwort 7 von semi
Rufe es so auf:
java CountWords < DateiMitText.txt
Klartext: Eingabeumleitung aus Datei
Ich habe es nur zum Test für stdin gemacht. Du kannst System.in durch FileInputStream.
Das ganze ist, wie schon oben geschrieben, eine sehr naive Implementierung. Die erste Frage, die sich stellt, ist, was ein Wort überhaupt ist bzw. was soll gezählt werden. Für Sourcecodes von Programmiersprachen taugt es in dieser form nicht.
Gruß,
Michael
java CountWords < DateiMitText.txt
Klartext: Eingabeumleitung aus Datei
Ich habe es nur zum Test für stdin gemacht. Du kannst System.in durch FileInputStream.
Das ganze ist, wie schon oben geschrieben, eine sehr naive Implementierung. Die erste Frage, die sich stellt, ist, was ein Wort überhaupt ist bzw. was soll gezählt werden. Für Sourcecodes von Programmiersprachen taugt es in dieser form nicht.
Gruß,
Michael

