2017-01-29 4 views
2

Кажется, что проблема связана с чтением и записью из текстового файла.Чтение и написание текста не завершено?

Имея два разных файла, я распечатывал содержимое, и оно не похоже на то, что должно быть в текстовых файлах.

Я попытался добавить + и без, и добавить bw.close() или без. Я также попытался использовать сканер, но ничего не распечатывал.

Не могли бы это изменить?

private void readFromFile(File cf2) throws IOException, Exception { 

    FileReader fr = new FileReader(cf2); 
    try (BufferedReader bw = new BufferedReader(fr)) { 
    System.out.println("Wait while reading !"); 

    while(bw.readLine() != null) 
    s1 += bw.readLine(); 
    System.out.println(s1); 
    bw.close(); 
    } System.out.println("File read !"); 
    } 

ответ

1

Половина ваших readLine вызовов используется для проверки данных для null, другая половина добавляется в s1. Вот почему вы получаете только часть ввода.

Чтобы исправить код, сделайте петлю, как это:

while (true) { 
    String s = bw.readLine(); 
    if (s == null) break; 
    s1 += s; 
} 

Однако, это крайне неэффективно. Вы бы лучше использовать StringBuffer:

StringBuffer sb = new StringBuffer() 
while (true) { 
    String s = bw.readLine(); 
    if (s == null) break; 
    sb.append(s); 
    // Uncomment the next line to add separators between lines 
    // sb.append('\n'); 
} 
s1 = sb.toString(); 

Обратите внимание, что ни один из '\n' символов из файла не будет в выходной строке. Чтобы добавить разделители назад, раскомментируйте прокомментированную строку в приведенном выше коде.

+0

Я попытался использовать его с StringBuffer, но, похоже, не работает. Без этого хорошо работает. Спасибо. –

1

Вы используете bw.readLine() дважды, ведьма потребляет две строки, но вы добавляете только один из них в s1 каждый раз. Постарайтесь

String line; 
while((line = bw.readLine()) != null) 
    s1 += line; 
System.out.println(s1); 
1

Вы дважды вызываете readline(), поэтому получаете только каждую вторую строку.

private void readFromFile(File cf2) throws IOException, Exception { 

    FileReader fr = new FileReader(cf2); 
    try (BufferedReader br = new BufferedReader(fr)) { 
     System.out.println("Wait while reading !"); 
     StringBuilder sb = new StringBuilder(); 
     String s; 
     while((s = br.readLine()) != null) { 
      sb.append(s); 
     } 
     System.out.println(sb.toString()); 
    } 
    System.out.println("File read !"); 
    } 

Вам не нужно закрывать br, потому что делается примерочных с-ресурсами.

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