# Textdatei einlesen und Zeilen zählen



## ferhat68305 (11. Nov 2014)

wie kann ich aus einer eingelesenen Textdatei, dessen zeilen zählen und ggf. ausgeben lassen, wie viele es waren.

ich komme nicht so ganz weiter.

mfg
ferhat


----------



## JavaMeister (11. Nov 2014)

Was hast du bisher probiert?

Weil ich würde ja als erstes prüfen, ob jemand schon mal sowas gemacht hat. 

Dann sagst du. Ohh  ja aber nicht so wie ich es brauch. 

Dann würde ich wieder fragen, was ist nicht so, wie du es brauchst.


----------



## Joose (11. Nov 2014)

Was hast du denn bisher versucht? (Code)
Wo genau kommst du nicht weiter?


----------



## chuxXo (11. Nov 2014)

Schau dir das hier an:
https://www.youtube.com/watch?v=3_40oiUdLG8


----------



## Anonym271 (12. Nov 2014)

Also entweder könntest du alle '\n' in der datei zählen (was aber umständlich und unverlässlich ist), oder du machst es direkt beim Datei auslesen also ca. so:

```
FileReader fr = new FileReader(dateipfad);
BufferedReader br = new BufferedReader(fr);
String line;
String text = "";
int i = 0;
while((line = br.readLine()) != null){
    text += line + "\n";
    i++;
}
```
Dann ist text der Inhalt der Date und i ist die Anzahl der Zeilen.
Ich hoffe, dass ich helfen konnte und keine Fehler gemacht habe, hab das nämlich grad nur am iPad getippt und nicht ausprobiert. Sollte aber gehn, da ich zufällig sowas ähnliches gebraucht habe


----------



## Flown (13. Nov 2014)

Bitte verwende wenn dann schon ordentliche Lösungen. Anonym271 schließt die InputReader nicht.

Hier hast du 2 Lösungsmöglichkeiten. Eine mit IO und eine mit NIO:


```
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CountLines {
  public static void main(String[] args) {
    String path = "./resources/Test.txt";
    try {
      System.out.println(countLinesIO(path));
      System.out.println(countLinesNIO(path));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  
  public static int countLinesNIO(String path) throws IOException {
    Path p = Paths.get(path);
    if (Files.exists(p) && Files.isReadable(p)) {
      return Files.readAllLines(p).size();
    }
    return -1;
  }
  
  public static int countLinesIO(String path) throws FileNotFoundException, IOException {
    File file = new File(path);
    if (file.exists() && file.canRead()) {
      try (FileReader fileReader = new FileReader(file); BufferedReader br = new BufferedReader(fileReader)) {
        int nrLines = 0;
        while (br.readLine() != null) {
          nrLines++;
        }
        return nrLines;
      }
    }
    return -1;
  }
}
```

[edit]Besser ist es noch die Exceptions weiterzuwerfen.[/edit]


----------



## arilou (13. Nov 2014)

Auch nett: Die Zeilen in ein ArrayList<String> einlesen, und danach dessen .size() abfragen.


----------



## Flown (13. Nov 2014)

Ist doch nichts anderes als Zeile für Zeile einlesen, diese zu verwerfen und dann einen Zähler zu erhöhen oder?


----------



## arilou (13. Nov 2014)

Flown hat gesagt.:


> Ist doch nichts anderes als Zeile für Zeile einlesen, diese zu verwerfen und dann einen Zähler zu erhöhen oder?


Richtig - nur dass selten jemand die Zeilen zählt, nur um die Anzahl herauszufinden. Fast immer soll dann anschließend der Inhalt weiterverarbeitet werden - und dann ist so eine vorhandene ArrayList doch netter, als die Datei nochmal zu öffnen und nochmal auszulesen.

Meine Glaskugel ist halt _relativ_ gut...


----------



## Flown (13. Nov 2014)

Ahh I see....

Glaskugel hin oder her ich hab mir im Forum angewöhnt maßgeschneiderte Lösungen zu posten und nicht denn Sinn zu hinterfrage . Aber du hast Recht sinnvoll wäre es die Liste zurückzuliefern und händisch ein size darauf abzusetzen!


----------



## Anonym271 (13. Nov 2014)

Flown hat gesagt.:


> Bitte verwende wenn dann schon ordentliche Lösungen. Anonym271 schließt die InputReader nicht.


Danke, hatte ich tatsächlich vergessen


----------

