Supportnet Computer
Planet of Tech

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?

Antwort 2 von mr_x_hacker

Naja, test.readLine() liest eine Zeile... machst du das nochmal, liest er noch eine :-)
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!

Antwort 4 von mr_x_hacker

Für den Job würde ich einfach alle Zeilen zu einem großen String zusammenbauen:


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
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?

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: