Путаница с чтением файла J2me.Пожалуйста, помогите мне понять - PullRequest
1 голос
/ 01 мая 2011

Я работаю над приложением J2ME для телефонов Symbian S60, где требуется чтение из текстового файла.У меня нет доступа к BufferedReader для извлечения строки текста из файла, но я нашел это на справочных форумах Nokia, и это меня немного смущает.Вот код, и мой вопрос ниже.Спасибо за ответы.


    /**
     * Reads a single line using the specified reader.
     * @throws java.io.IOException if an exception occurs when reading the
     * line
     */
    private String readLine(InputStreamReader reader) throws IOException {
        // Test whether the end of file has been reached. If so, return null.
        int readChar = reader.read();
        if (readChar == -1) {
            return null;
        }
        StringBuffer string = new StringBuffer("");
        // Read until end of file or new line
        while (readChar != -1  && readChar != '\n') {
            // Append the read character to the string. Some operating systems
            // such as Microsoft Windows prepend newline character ('\n') with
            // carriage return ('\r'). This is part of the newline character
            // and therefore an exception that should not be appended to the
            // string.
            string.append((char)readChar);

            // Read the next character
            readChar = reader.read();
        }
        return string.toString();
    }
    

Мой вопрос касается метода readLine ().В цикле while () зачем проверять readChar! = -1 и! = '\ N'?Насколько я понимаю, -1 представляет конец потока (EOF).Я понимал, что если я извлекаю одну строку, мне нужно только проверить наличие символа новой строки.

Спасибо.

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Пожалуйста, внимательно прочитайте документацию по коду.На все ваши сомнения в этом есть хороший ответ.

Функция проверяет «-1», потому что заботится о тех потоках, которые идут без символа новой строки.В этом случае он вернет весь поток в виде строки.

0 голосов
/ 02 мая 2011

Это просто способ, которым вы (любите) применять логику к тому, что вы пытаетесь делать / достигать.Например, приведенный выше пример мог бы быть написан как его


private String readLine(InputStreamReader reader) throws IOException {
        // Test whether the end of file has been reached. If so, return null.
        int readChar = reader.read();
        if (readChar == -1) {
            return null;
        }else{
            StringBuffer string = new StringBuffer("");

            // Read until end of file or new line
            while (readChar != '\n') {
                // Append the read character to the string. Some operating systems
                // such as Microsoft Windows prepend newline character ('\n') with
                // carriage return ('\r'). This is part of the newline character
                // and therefore an exception that should not be appended to the
                // string.
                string.append((char)readChar);

                // Read the next character
                readChar = reader.read();
            }
            return string.toString();
        }
    }

Так что предыдущий пример проверки readChar для -1 это просто защитная проверка.

...