2016-07-26 12 views
2

Der folgende Code zeigt nur die erste Codezeile an und stoppt. Ich möchte jede Codezeile zurückgeben, bis es keine mehr gibt.Wie werden alle Textzeilen aus einer Datei angezeigt, anstatt am Ende einer Zeile anzuhalten?

private String GetPhoneAddress() { 
    File directory = Environment.getExternalStorageDirectory(); 
    File myFile = new File(directory, "mythoughtlog.txt"); 
    //File file = new File(Environment.getExternalStorageDirectory() + "mythoughtlog.txt"); 
    if (!myFile.exists()){ 
     String line = "Need to add smth"; 
     return line; 
    } 
    String line = null; 
    //Read text from file 
    //StringBuilder text = new StringBuilder(); 
    try { 
     BufferedReader br = new BufferedReader(new FileReader(myFile)); 
     line = br.readLine(); 
    } 
    catch (IOException e) { 
     //You'll need to add proper error handling here 
    } 
    return line; 
} 
+0

Sie brauchen eine Schleife. Sie fragen nur nach einer einzelnen Zeile. – kamoroso94

+2

Sie haben die Zeile nur einmal gelesen. Sie müssen eine While-Schleife wie folgt hinzufügen: 'while (br.readLine()! = Null) { line = br.readLine(); } ' und dann an eine Zeichenfolge mit Zeilenvorschubzeichen anhängen (diese Operation muss auch innerhalb der Schleife erfolgen). –

+0

@IshitaSinha Damit werden nur die geraden Zeilen angezeigt. Es ist keine korrekte Art, eine Textdatei zu lesen. – EJP

Antwort

2

Sie könnten Schleife über die Ergebnisse der readLine() und sie ansammeln, bis Sie eine null bekommen, was das Ende der Datei (BTW, beachten Sie, dass Ihr Code-Schnipsel, den Leser zu schließen vernachlässigt. Ein Try-with-Ressourcenstruktur Griff das könnte):

try (BufferedReader br = new BufferedReader(new FileReader(myFile))) { 
    String line = br.readLine(); 
    if (line == null) { 
     return null; 
    } 
    StringBuilder retVal = new StringBuilder(line); 
    line = br.readLine(); 
    while (line != null) { 
     retVal.append(System.lineSeparator()).append(line); 
     line = br.readLine(); 
    } 
    return retVal.toString(); 
} 

wenn Sie mit Java 8, Sie viele dieser Kessel Beschichtete Code mit dem neu eingeführten lines() Methode speichern:

try (BufferedReader br = new BufferedReader(new FileReader(myFile))) { 
    return br.lines().collect(Collectors.joining(System.lineSeparator())); 
} 
2

Eine deutlich weniger ausführliche Lösung:

Verwandte Themen