0

以下に記述されているコードでは、2番目のwhileループが、最初のwhileループが使用している同じファイルの2行目から読み取られるようにします。現在のところ、2番目のwhileループはファイルの3行目から読み取っています。別のバッファリーダーを使用してそれを行うことができます。しかし、別のより良い方法はありますか?

filename = data1
readFile = new File(filename);
BufferedReader reader = null;
try
{
    reader = new BufferedReader( new FileReader(readFile) );
}
catch (IOException ioe)
{
    System.err.println("Error: " + e.getMessage());     
}
String newline;
int secondRecord = 0;
while((secondRecord < 2) && ((newline = readline(reader)) != null))
    {
    System.out.println(newline);
            secondRecord ++;
    }

while ((newline = readline(reader)) != null)
    {
    System.out.println(newline);
    }
4

4 に答える 4

1

BufferedReaderはとをサポートmark()reset()ます。mark()したがって、最初のループの前と後に呼び出す必要があります。そうreset()すれば、同じ行を再度読み取ることができるはずです。

もちろん、これを行うには、BufferedReaderがすべてをメモリに保持する必要があるため、ファイルが大きすぎない場合にのみこれを実行してください。

于 2011-05-06T11:25:02.143 に答える
0

私はファイルをリストに読み込み、リストを希望どおりに処理します。

List<String> lines = FileUtils.readLines(readFile);
for(String line: lines.subList(0,2))
    System.out.println("first loop "+line);
for(String line: lines.subList(2, lines.size()))
    System.out.println("second loop "+line);
于 2011-05-06T11:24:37.843 に答える
0

後で戻りたい場所にマークを付けることができます。(ファイルを使用するのに、大きすぎる先読みバッファは必要ないと仮定します。)

于 2011-05-06T11:25:07.953 に答える
0

2番目のwhileの代わりにdowhileループを使用する必要がありました。そうすれば、2行目も読み取られます。

于 2011-05-06T12:21:48.327 に答える