2016-03-22 6 views
0

Я читаю все символы из файла с объектом FileReader с помощью методови read(char[] ch). Но когда я пытаюсь использовать оба этих метода, я получаю вывод только для одного.Методы FileReader read() и read (char []) в JAVA

Вот мой фрагмент кода:

class FR 
{ 
    void filereader() throws Exception 
    { 
     File f = new File("abc.txt"); 
     FileReader fr = new FileReader(f); 
     char[] ch = new char[(int)f.length()]; 
     fr.read(ch); 
     for (char ch1 : ch) 
     { 
      System.out.print(ch1); 
     } 
     System.out.println("\n*********************************"); 
     int i = fr.read(); 
     while(i != -1) 
     { 
      System.out.print((char)i); 
      i = fr.read(); 
     } 
     fr.close(); 
    } 
} 

Может кто-нибудь, пожалуйста, объясните, почему while часть не выполняется?

+0

Какое содержимое 'abc.txt'? – Idos

+0

Просто Мое имя, Мой колледж, Мой курс все в отдельных строках. – Karthi13

+2

Примечание: 'f.length()' - длина в байтах, а не символы. Если у вас многобайтовые символы, фактическая длина символов будет меньше. –

ответ

3

При выполнении:

char[] ch = new char[(int)f.length()]; 
fr.read(ch); 

Вы эффективно чтение весь файл.
После этого каждый вызов read вернется -1, так как это конец файла:

Возвращает количество прочитанных символов, или -1, если конец потока достигнут

Вы можете увидеть пример использования с вводом/выводом here.

Если вы хотите прочитать файл по одному слову или по строке, вы можете посмотреть на Scanner.

1

Ваш fr.read(ch) звонок читает весь файл.
Вызов fr.read() после этого обнаружит EOF и не будет возвращать символ.

При изменении порядка чтения разделов вашего кода вы увидите другое поведение.

Вы также должны проверить количество символов, прочитанных по вашему звонку fr.read(ch). Это должно было дать ключ к этому.

+0

Grt !!! Это очень помогло. Поэтому мне нужно добавить новый объект 'FileReader' для блока' while' для выполнения ..... – Karthi13