文件尚未找到它存在

时间:2013-12-01 22:26:06

标签: java file ioexception

我正在练习从文件中读取文本而无法理解我做错了什么。这就是我最初的想法:

public class Main {
public static void main(String[] args){
File f = new File("C:\\test\\est.txt");
            Scanner in = new Scanner(f);
            while (in.hasNext()){
                System.out.println(in.next());
            }
      }
}

编译器说:未处理的异常java.io.fileNotFoundException。 所以我尝试了这个:

File f = new File("C:\\test\\est.txt");
    Scanner in = new Scanner(f);
    try{
        while (in.hasNext()){
            System.out.println(in.next());
        }
    }catch (IOException i){
        System.out.println(i.getMessage());
    }

现在编译器说:未处理的异常java.io.fileNotFoundException。而且:java.io.fileNotFoundException永远不会在相应的try块中抛出。

然后我尝试了这个:

File f = new File("C:\\test\\est.txt");
    Scanner in = new Scanner(f);
    try{
        while (in.hasNext()){
            System.out.println(in.next());
        }
    }catch (IOException i){
        throw new IOException(i.getMessage());
    }

然而它仍然说:未处理的异常java.io.fileNotFoundException!

任何人都可以解释我做错了什么吗?我如何能够以与我的尝试类似的方式阅读文件中的所有文本。

**注意我的文件存在。

3 个答案:

答案 0 :(得分:4)

未处理的异常意味着它可能会被抛出代码中的某个位置,但是当您明确不得不这样做时,您不会将其考虑在内。所以要修复,将其包装在try-catch中:

File f = new File("C:\\test\\est.txt");
try
{
    Scanner in = new Scanner(f);
    while (in.hasNext()){
        System.out.println(in.next());
    }
}catch (IOException i){
    e.printStackTrace();
}

请注意,扫描仪也位于try块内。您的尝试很好,但Scanner构造函数也可能抛出FileNotFoundException。为了在将来解决这些问题,编译器会准确地告诉您抛出异常的行,而不是处理它。

答案 1 :(得分:1)

您需要通过以下方式处理FileNotFoundException

throws FileNotFoundException

在您的方法标题中。或者添加一个catch语句:

}catch (FileNotFoundException ex){
    //log it or handle it
}

另外,避免在catch中抛出相同的异常:

throw new IOException(i.getMessage());

所以你想要这样的东西:

try{
    File f = new File("C:\\test\\est.txt");
    Scanner in = new Scanner(f);
    while (in.hasNext()){
        System.out.println(in.next());
    }
}catch (FileNotFoundException ex){
    //log it or handle it
}catch (IOException i){
    //throw new IOException(i.getMessage());
    //log it or handle it 
}
  

好的,但现在编译器打印出java.io.FileNotFoundException:   C:\ Users \ Cristian \ Desktop(访问被拒绝)。为什么“拒绝访问?”

确保您具有该目录的读取权限。尝试以管理员身份运行IDE(可以通过右键单击IDE并单击“以管理员身份运行”来执行此操作)。

答案 2 :(得分:1)

错误告诉你问题是什么;-) 您正在处理IOException,但不处理FileNotFoundException!

试试这样:

File f = new File("C:\\test\\est.txt");
Scanner in = null;
try {
   in = new Scanner(f);
} catch (IOException i){
   i.printStackTrace();
}

while (in != null && in.hasNext()){
   System.out.println(in.next());
}

编辑:确实FileNotFoundException延伸IOException,所以你不需要单独处理它:)