Java bufferedreader иногда пропускает первый символ при чтении строк

Я пытаюсь прочитать файл с помощью буферизованного считывателя, но иногда он пропускает первый символ в строке. Вот файл, который я читаю: http://files.moonmana.com/forums/Rectangle.h

вот результат, я получаю:

LINE: #ifndef RECTANGLE_H
LINE: include "Shape.h"
LINE: lass Rectangle : public Shape {
LINE: rivate:
LINE: double _width;
LINE: std::vector<b2Vec2*>* _vertices;
LINE: ublic:
LINE: Rectangle(std::vector<b2Vec2*>* vertices) { _vertices = vertices;};
LINE: void createVertices();
LINE: bool isMimePoint(b2Vec2);
LINE: double getWidth(){return _width;};
LINE: void setWidth(double width);
LINE: void setHeights(double heights);
LINE: ShapeType getType();
LINE: void moveOn( b2Vec2 ,b2Vec2*);
LINE: virtual b2Vec2* getCenter();
LINE: ;
LINE: endif

Вот мой исходный код:

String path = file.getPath();
BufferedReader _br;
    try {
        _br = new BufferedReader(new FileReader(path));

        do {
            System.out.println("LINE: " + _br.readLine());
            lines.add(_br.readLine());
        } while (_br.read() != -1);

        _br.close();
    } catch (Exception e) {
        System.out.println("Error reading file: " + e.getMessage());
    }

person Shpytyack Artem    schedule 19.04.2012    source источник
comment
да, но взгляните на другие линии, девушка, а не класс и т. д.   -  person Shpytyack Artem    schedule 19.04.2012


Ответы (2)


Вы печатаете каждую вторую строку, сохраняете каждую вторую строку и пропускаете начало каждой второй строки. Вы читаете данные в трех местах и ​​используете их по-разному. Если у вас есть _br.read() символ, он не будет читать его снова, поэтому он не появится в строке.

Лучшим подходом является использование

String line;
while((line = _br.readLine()) != null) {
   System.out.println(line);
   lines.add(line);
}

Как видите, он читается в одном месте, и эти значения используются последовательно.

person Peter Lawrey    schedule 19.04.2012
comment
Большое тебе спасибо. Он работает с вашим кодом правильно, но я до сих пор не понимаю, почему он пропустил начало строки (допустим, я удалил System.out.println(LINE: + line); и он читает каждую строку) - person Shpytyack Artem; 19.04.2012
comment
Следующий ответ ответил на мой вопрос. - person Shpytyack Artem; 19.04.2012
comment
Я надеялся, что если у вас есть _br.read() символ, он не будет читать его снова, поэтому он не появится в строке. помог бы. ;) - person Peter Lawrey; 19.04.2012

метод чтения использует символ, проверьте, readLine возвращает null.

...
String line;
while ((line = _br.readLine()) != null) {
    System.out.println("LINE: " + line);
    lines.add(line);
}
...
person crunchdog    schedule 19.04.2012
comment
Спасибо большое, теперь понял! - person Shpytyack Artem; 19.04.2012