Java: проблема с чтением файла - PullRequest
1 голос
/ 24 февраля 2011

Я загружаю файл XML следующим способом:

public static String readTextFile(String fullPathFilename) throws IOException {
        StringBuffer sb = new StringBuffer(1024);
        BufferedReader reader = new BufferedReader(new FileReader(fullPathFilename));

        char[] chars = new char[1024];
        while(reader.read(chars) > -1){
            sb.append(String.valueOf(chars));   
        }

        reader.close();

        return sb.toString();
    }

Но он не загружает все данныеВместо 25634 символов загружается на 10 меньше (25624).Почему это так?

Спасибо,

Иван

Ответы [ 4 ]

1 голос
/ 24 февраля 2011

С BufferedReader вы получаете метод readLine () - метод, который мне подходит.

        StringBuffer sb = new StringBuffer( 1024 );
        BufferedReader reader = new BufferedReader( new FileReader( fullPathFilename ) );

        while( true ) {
            String line = reader.readLine();
            if(line == null) {
                break;
            }
            sb.append( line );
        }
        reader.close();
1 голос
/ 24 февраля 2011

I думаю в вашем коде есть ошибка, последнее чтение может не обязательно заполнять символ [], но вы все равно загружаете строку со всем этим. Для этого вам нужно сделать что-то вроде:

    StringBuilder res = new StringBuilder();
    InputStreamReader r = new InputStreamReader(new BufferedInputStream(is));
    char[] c = new char[1024];
    while(true) {
        int charCount = r.read(c);
        if (charCount == -1) {
            break; 
        }
        res.append(c, 0, charCount);
    }
    r.close();

Кроме того, откуда вы знаете, что ожидаете 25634 символа?

(и использовать StringBuilder вместо StringBuffer, первый не безопасен для потоков, поэтому заметно быстрее)

0 голосов
/ 24 февраля 2011

Используйте FileInputStream, чтобы избежать распознавания определенных символов как utf-8:

StringBuffer sb = new StringBuffer(1024);
FileInputStream fis = new FileInputStream(filename);
char[] chars = new char[1024];
while(reader.read(chars) > -1){
    sb.append(String.valueOf(chars));   
}
fis.close();

return sb.toString();
0 голосов
/ 24 февраля 2011

Возможно, у вас есть 25634 байт в вашем файле, которые представляют только 25624 символов ? Это может произойти с многобайтовыми наборами символов, такими как UTF-8. Все InputStreamReader (включая FileReader) автоматически выполняют это преобразование, используя Charset (либо явно заданное, либо кодировку по умолчанию, которая зависит от платформы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...