2016-07-26 3 views
2

Приведенный ниже код выводит первую строку кода и останавливается. Я хотел бы вернуть каждую строку кода до тех пор, пока ее не будет больше.Как отображать все строки текста из файла, а не останавливаться в конце строки?

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

Вам нужен цикл. Вы только просите одну строку. – kamoroso94

+2

Вы прочли строку только один раз. Вам нужно добавить цикл while следующим образом: 'while (br.readLine()! = Null) { line = br.readLine(); } ' , а затем присоединить его к строке с символами новой строки (эта операция также должна быть внутри цикла). –

+0

@IshitaSinha Это отображает только четные строки. Это не правильный способ чтения текстового файла. – EJP

ответ

2

Вы можете цикл по результатам readLine() и накапливать их, пока вы не получите null, что указывает на конец файла (кстати, обратите внимание, что ваш сниппет забыл закрыть читателя. А попробуй с-ресурса структуры может справиться с этим):

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(); 
} 

, если вы используете Java 8, вы можете сэкономить много этого котел покрытия коды с вновь введенным lines() способом:

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

Значительно менее многословным решение:

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

 Смежные вопросы

  • Нет связанных вопросов^_^