2

バッファ付きリーダーでファイルを読み込もうとしていますが、行の最初の文字がスキップされることがあります。これが私が読んでいるファイルです: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());
    }
4

2 に答える 2

8

2行ごとに印刷し、2行ごとに保存し、2行ごとの開始をスキップしています。3 つの場所でデータを読み取り、さまざまな方法で使用します。_br.read() 文字を取得すると、再度読み取られないため、行に表示されません。

より良いアプローチは、使用することです

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

ご覧のとおり、1 か所で読み取られ、その値が一貫して使用されます。

于 2012-04-19T12:14:18.517 に答える
3

read-methodは文字を消費します。代わりにreadLineが null を返すかどうかを確認してください。

...
String line;
while ((line = _br.readLine()) != null) {
    System.out.println("LINE: " + line);
    lines.add(line);
}
...
于 2012-04-19T12:14:59.420 に答える