1

私の課題の1つで、ファイルを読み取って1行ずつ印刷しようとしていました。hasNextLine を再度使用しようとしましたが、機能しませんでした。どうにかして完了しようとしましたが、新しいスキャナーを作成せずにファイルをもう一度処理できる方法があるかどうか知りたいです。

ここに私のコードスニペットがあります

sc = new Scanner(new File(args[0]));

        while (sc.hasNextLine()) {

            System.out.println(sc.nextLine());
        }

後でもう一度 while を使いたいのですが、それができません。リセットするか、先頭に戻してファイルを再度トラバースする方法はありますか。

4

3 に答える 3

1

Scanner最初のものを閉じた後、新しいものを作成できます:

sc.close();
sc = new Scanner(new File(args[0]));

// do the same thing again
于 2013-09-13T13:26:30.620 に答える
0

最適化するために、将来の使用のためにファイルへの参照を保存できます。

File f = new File(args[0]);
sc = new Scanner(f);
//...
sc = new Scanner(f);

Scanner はスマート イテレータではありません。そのため、新しいものを作成するコストは、古いものを「巻き戻す」よりも小さくすることができます。

于 2013-09-13T13:29:50.050 に答える
0

FileReader装飾を使用できますRandomAccessFile

RandomAccessFile f = new RandomAccessFile(args[0], "r");
Scanner sc = new Scanner(new FileReader(f.getFD()));

//Read through scanner

//Rewind file
f.seek(0L);

//Read through file again
于 2013-09-13T13:30:55.633 に答える