为什么我不能捕获此FileNotFoundException?

时间:2016-12-07 15:17:41

标签: java eclipse debugging exception io

package test4;

import java.io.*;

public class Reader {

    public static void main(String[] args) {
        print(send("test.txt"));
    }

    public static BufferedReader send(String filename) {
        File file = null;
        FileReader filer = null;
        BufferedReader filed = null;

        try {
            file = new File(filename);
        } catch(FileNotFoundException e) {
            System.err.println("Could not find file!");
        }

        try {
            filer = new FileReader(file);
        } catch(Exception e) {
            System.err.println("Could not initialize file reader!");
        }

        try {
            filed = new BufferedReader(filer);
        } catch(Exception e) {
            System.err.println("Could not initialize buffered reader!");
        }

        return filed;
    }
}

send方法返回null BufferedReader,因为找不到File。 Eclipse只是说由于print方法存在NullPointerException,但是当我删除所有的try / catch语句时,Eclipse说我需要编写该方法抛出IOException或FileNotFoundException,它也允许我这样做,如果我不要它然后抛出FileNotFoundException。但是,当我尝试捕获File的FileNotFoundException时,Eclipse说这是无法访问的代码?基本上这一点在这里:

    try {
        file = new File(filename);
    } catch(FileNotFoundException e) {
        System.err.println("Could not find file!");
    }

为什么Eclipse在删除try / catch语句时允许我抛出FileNotFoundException时无法访问此代码?

4 个答案:

答案 0 :(得分:4)

文件的构造函数不会抛出FileNotFoundException,你可以在这里看到Javadoc

  

public File(String pathname)

     

通过转换创建一个新的File实例   给定的路径名​​字符串为抽象路径名。如果给定   string是空字符串,然后结果是空的抽象   路径名。

     

参数:pathname - 路径名字符串

     

抛出:NullPointerException - 如果pathname参数为null

但FileReader会抛出!再次,另一个javadoc

  

public FileReader(File file)              throws FileNotFoundException在给出要读取的文件的情况下创建一个新的FileReader。

     

参数:file - 要从中读取的文件

     

抛出:FileNotFoundException - 如果文件不存在,则为   目录而不是常规文件,或由于某些其他原因不能   开放阅读。

答案 1 :(得分:0)

try {
    file = new File(filename);
} catch(Exception e) {
    System.err.println("Could not find file!");
}

答案 2 :(得分:0)

构造函数File(filename)不会抛出FileNotFoundException,即使该文件不存在,也可以使用file.exists()进行检查。

如果您尝试读取不存在的文件,则会抛出FileNotFoundException。

答案 3 :(得分:0)

我只是试图运行你的程序。以下图片说该文件不为空

debugger... enter image description here

虽然file为空,但创建了

filePath。如果你想抓住FileNotFoundException如果文件不存在,你可以这样做:

        if(!file.exists()){
            throw new FileNotFoundException("File not found");
        }