0

メソッド内では、スキャナーを使用してファイル内のテキストを読み取ります。このファイルは常に存在するとは限りません。存在しない場合は、単に何もしない (つまり、スキャンしない) 必要があります。もちろん、次のように try/catch を使用できます。

String data = null;
try
{
    Scanner scan = new Scanner(new File(folder + "file.txt"));
    data=scan.nextLine();
    scan.close();
}
catch (FileNotFoundException ex)
{
}

私の質問は、try/catch を避けるために何ができるでしょうか? 未使用のローカル変数が嫌いだからです。私は次のようなことを考えていました:

String data = null;
File file_txt = new File(folder + "file.txt");
if (file_txt.exists())
{
    Scanner scan = new Scanner(file_txt);
    data=scan.nextLine();
    scan.close();
}

しかしもちろん、これでNetbeansでエラーが発生し、プロジェクトをビルドできません...

4

3 に答える 3

5

いいえ、チェック例外です。tryの後には、 catchブロックおよび/またはfinallyブロックのいずれかを続ける必要があります。チェック例外を処理するには、2 つの方法があります。

方法 1: を使用してコードをラップします。try/catch/finally

オプション1

try{
    Scanner scan = new Scanner(new File(folder + "file.txt"));
    data=scan.nextLine();
    scan.close();

}
catch (FileNotFoundException ex)
{
   System.out.println("Caught " + ex);
}

オプション 2

try{
    Scanner scan = new Scanner(new File(folder + "file.txt"));
    data=scan.nextLine();
    scan.close();

}
finally
{ 
      System.out.println("Finally ");
}

オプション 3

    try{ 
     Scanner scan = new Scanner(new File(folder + "file.txt"));
     data=scan.nextLine();
     scan.close();
     }catch(FileNotFoundException ex){
          System.out.println("Caught " + ex );
     }finally{
          System.out.println("Finally ");
     }  

方法 2:句を使用して例外をスローしthrow、すべての例外をリストします。throws

    class ThrowsDemo {

    static void throwOne() throws IllegalAccessException {
        System.out.println("Inside throwOne.");
        throw new IllegalAccessException("demo");
    }

    public static void main(String args[]) {
        try {
            throwOne();
        } catch (IllegalAccessException e) {
            System.out.println("Caught " + e);
        }
    }
    }

注:チェックされた例外は、コンパイラがこのエラー/例外を処理するために何かを書くことを強制することを意味します。したがって、私の知る限り、上記の方法以外にチェック例外処理の代替手段はありません。

于 2012-12-14T16:07:02.193 に答える
2

FileNotFoundExceptionはチェックされた例外です。キャッチまたは指定の動作のため、メソッド宣言の throws 句でキャッチ (または) 指定する必要があります。

于 2012-12-14T16:07:27.453 に答える
1

どうですか

   catch (FileNotFoundException ex)
   {
       // create a log entry about ex
   }
于 2012-12-14T16:09:05.103 に答える