0

在方法内部,我使用 Scanner 读取文件中的文本。这个文件并不总是存在,如果它不存在,我只想什么都不做(即不扫描)。当然,我可以像这样使用 try/catch:

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

我的问题是我能做些什么来避免尝试/捕获?因为我不喜欢未使用的局部变量。我在想类似的东西:

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块。有两种处理检查异常的方法。

方法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并列出所有异常withthrows子句。

    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);
        }
    }
    }

注意: Checked Exception 意味着编译器强制你写一些东西来处理这个错误/异常。因此,AFAIK,除了上述方法外,没有任何替代检查异常处理的方法。

于 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 回答