Что вы хотите сделать, это:

я есть такой код для чтения текстового файла с помощьюBufferedReader:

BufferedReader reader=null;
    try {
        reader = new BufferedReader(new FileReader("file1.txt"));

        while (reader.ready()) {
            final String line = reader.readLine();
            System.out.println("<"+line+">");
        } catch (..)
    {
        ...
    }

Он работает правильно, но Findbugs выдает предупреждение:

NP_DEREFERENCE_OF_READLINE_VALUE: результат вызова readLine () разыменовывается без проверки, чтобы видеть, является ли результат нулевым. Если больше нет строк текста для чтения, readLine () вернет значение null и разыменование, которое сгенерирует исключение нулевого указателя.

Когда я меняюFileReader вStringReaderт.е.

BufferedReader reader=null;
    try {
        reader = new BufferedReader(new StringReader("ABCD"));

        while (reader.ready()) {
            final String line = reader.readLine();
            System.out.println("<"+line+">");
        } catch (..)
    {
        ...
    }

readLine метод возвращаетnull в то время какready метод всегда возвращаетtrue - Действительно, это бесконечный цикл.

Кажется, чтоreadLine может вернутьсяnull даже еслиready возвращаетсяtrue, Но почему поведение отличается для разныхReaders?

ОБНОВИТЬ:

Я знаю нормальный способ чтения текстового файла (как иллюстрировали Питер и Али). но я прочитал этот кусок кода от моего коллеги и понял, что я не знаюready метод. Затем я читаю JavaDoc, но не понимаюblock, Затем я сделал тест и разместил этот вопрос. Итак, лучший способ поставить этот вопрос может быть:

Когда вход будет блокироваться? Как использоватьready метод (или почему бы не использовать его)? Почему те 2Readerс (FileReader а такжеStringReader) ведут себя по-разному в отношенииready метод?

Ответы на вопрос(4)

Ваш ответ на вопрос