2012-04-19 5 views
2

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

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

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()); 
    } 
+0

да, но Tak посмотреть на другие линии «Lass» вместо «класс» и т.д. –

ответ

7

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

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

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

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

+0

Спасибо очень много. Он правильно работает с вашим кодом, но я до сих пор не понимаю, почему он пропустил начало строки (допустим, я удалил System.out.println («LINE:« + line »), и он читает каждую строку) –

+0

Следующий ответ ответил мой вопрос. –

+1

Я надеялся: «Когда у вас есть символ _br.read(), он не будет читать его снова, чтобы он не появлялся в строке». помог бы. ;) –

2

read-method потребляет символ, если readLine возвращает null вместо этого.

... 
String line; 
while ((line = _br.readLine()) != null) { 
    System.out.println("LINE: " + line); 
    lines.add(line); 
} 
... 
+0

Большое спасибо, теперь я понимаю! –

Смежные вопросы