4

Java と NetBeans は初めてで、現在抱えている問題とまったく同じ質問を見つけられませんでした。

既存のテキスト ファイルの最初の行を出力するための基本的なコードがあります。

14    File test = new File("C:\\Users\\Computer\\Desktop\\testfile.txt");
15    Scanner read = new Scanner(test);
16    
17    String firstline = read.nextLine();
18    System.out.println(firstline);
19  
20    read.close();

何らかの理由で、Dr Java と Windows コマンドラインでは同じコードが問題なく動作しますが、NetBeans では次のようになります。

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at testfile.Testfile.main(Testfile.java:18)

なんで?問題を解決するように思われることの 1 つは、「File」を「FileReader」に置き換えることですが、それが機能する理由はわかりません。

4

1 に答える 1

1

まず、スキャナーにデータがあるかどうかを確認する必要があります。次に例を示します。

File test = new File("D:\\testfile.txt");
Scanner read = new Scanner(test);

String line;
while (read.hasNextLine()) {
    line = read.nextLine();
    // your logic
    System.out.println(line);
}
read.close();

第二に、「read.hasNextLine()」(または read.hasNext またはその他の read.hasXxx メソッド) をチェックしない場合、コードから予想される 2 つの動作があります

2-最初の行が印刷されます。
-> NetBeans 7.3 RC1 を Java7u13 でテストしたところ、正常に動作しました。

I/O とスキャナの詳細については、http: //docs.oracle.com/javase/tutorial/essential/io/scanning.htmlを参照してください。

以下は、try-with-resources を使用する Java 7 の新しい方法です。これは、スキャナーを自動的に作成して閉じます。(インターフェイス Closeable を実装するすべてのオブジェクトでこれを取得できます)

File test = new File("D:\\testfile.txt");
try (Scanner read = new Scanner(test)) {
    String line;
    while (read.hasNextLine()) {
    line = read.nextLine();
    // your logic
    System.out.println(line);
    }
}
于 2013-02-07T19:57:06.280 に答える