【问题标题】:Java FileNotFoundException although file is thereJava FileNotFoundException 虽然文件在那里
【发布时间】:2016-08-02 21:59:30
【问题描述】:

我设置了尝试/捕获此错误的方法。我的问题是,即使我在同一个包中明确创建 Trivia.txt,它也会捕获 Trivia.txt 的 fileNotFoundException。我无法弄清楚为什么找不到该文件。我环顾四周寻找问题的答案,但没有运气。无论如何,这是我的代码

public static void readFile(){
    try{
        File file = new File("Trivia.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        while((line = br.readLine()) != null){
            System.out.println(line);

        }

        br.close();

    } 
    catch(FileNotFoundException e){
        System.out.println("file not found");
        System.out.println();
    }
    catch(IOException e){
        System.out.println("error reading file");
    }


}

这里的代码只是TextHandler类的一个方法,被WindowComp类(完全不相关的类)静态调用。包是 mainPackage,它包含 main() 和 WindowComp() 和 textHandler() 以及 Triva.Txt

【问题讨论】:

  • “在包中创建”是什么意思?请显示您的目录结构。

标签: java filenotfoundexception


【解决方案1】:

您打开文件的方式,应该是在当前工作目录中找到,而不是在您找到源的子目录中。

尝试System.out.println(file.getCanonicalPath()) 以找出代码期望文件的位置。

【讨论】:

  • 我发现getAbsolutePath() 通常也能正常工作,并且抛出的异常更少。
【解决方案2】:

尝试像这样将您的文件作为资源加载

URL fileURL = this.getClass().getResource("Trivia.txt");
File file = new File(fileURL.getPath());

这将从加载资源的类的同一个包中加载您的文件。

你也可以为你的文件提供一个绝对路径,使用

URL fileURL = this.getClass().getResource("/my/package/to/Trivia.txt");

【讨论】:

    【解决方案3】:

    如果在类的当前包之外的某个地方找到文件,也可以直接向构造函数提供绝对路径:

    File file = new File("path/to/file/Trivia.txt");
    

    您还可以使用其他构造函数,例如此答案中指示的构造函数:
    Java - creating new file, how do I specify the directory with a method?

    如需更多信息,请参阅以下文档: https://docs.oracle.com/javase/7/docs/api/java/io/File.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多