8 Stimmen

Wie kann man feststellen, ob ein Reader bei EOF ist?

Mein Code muss die gesamte Datei einlesen. Derzeit verwende ich den folgenden Code:

BufferedReader r = new BufferedReader(new FileReader(myFile));
while (r.ready()) {
  String s = r.readLine();
  // do something with s
}
r.close();

Wenn die Datei jedoch gerade leer ist, dann s null ist, was nicht gut ist. Gibt es eine Reader die einen atEOF() oder eine gleichwertige Methode?

6voto

18446744073709551615 Punkte 15274

En [docs](http://docs.oracle.com/javase/7/docs/api/java/io/Reader.html#read()) sagen:

public int read() throws IOException
Gibt zurück: Das gelesene Zeichen als Ganzzahl im Bereich von 0 bis 65535 (0x00-0xffff) oder -1, wenn das Ende des Streams erreicht wurde.

Im Falle eines Readers sollte man also gegen EOF prüfen wie

// Reader r = ...;
int c;
while (-1 != (c=r.read()) {
    // use c
}

Im Falle eines BufferedReader und readLine() kann es sein

String s;
while (null != (s=br.readLine())) {
    // use s
}

weil readLine() bei EOF null zurückgibt.

3voto

KIM Taegyoon Punkte 1777

Verwenden Sie diese Funktion:

public static boolean eof(Reader r) throws IOException {
    r.mark(1);
    int i = r.read();
    r.reset();
    return i < 0;
}

1voto

Synesso Punkte 35757

Ein Standardmuster für das, was Sie zu tun versuchen, ist:

BufferedReader r = new BufferedReader(new FileReader(myFile));
String s = r.readLine();
while (s != null) {
    // do something with s
    s = r.readLine();
}
r.close();

1voto

Funktioniert die Methode ready() nicht. Sie müssen aus dem Stream lesen und den Rückgabewert überprüfen, um festzustellen, ob Sie EOF erreicht haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X