【问题标题】:Java bufferedreader sometimes skips first character while reading linesJava bufferedreader 在读取行时有时会跳过第一个字符
【发布时间】:2012-04-19 12:08:37
【问题描述】:

我正在尝试使用缓冲阅读器读取文件,但有时会跳过一行中的第一个字符。 这是文件,我正在阅读: 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());
    }

【问题讨论】:

  • 是的,但是看看其他行“lass”而不是“class”等。

标签: java bufferedreader


【解决方案1】:

您正在打印每一行并保存每一行并跳过每一行的开头。您在三个地方读取数据并以不同的方式使用它。一旦你有 _br.read() 一个字符,它就不会再次读取它,所以它不会出现在行中。

更好的方法是使用

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

如您所见,它在一个地方读取,并且一致使用该值。

【讨论】:

  • 非常感谢。它可以正确使用您的代码,但我仍然不明白为什么它跳过了行首(假设我删除了 System.out.println("LINE: " + line); 它读取每一行)
  • 下一个答案回答了我的问题。
  • 我希望“一旦你有 _br.read() 一个字符,它就不会再次读取它,所以它不会出现在行中。”有助于。 ;)
【解决方案2】:

read-method 消耗一个字符,检查 readLine 是否返回 null。

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

【讨论】:

  • 非常感谢,现在我明白了!
猜你喜欢
  • 1970-01-01
  • 2014-06-07
  • 2019-03-10
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多