Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileNotFoundException,尽管存在文件_Java_Filenotfoundexception - Fatal编程技术网

Java FileNotFoundException,尽管存在文件

Java FileNotFoundException,尽管存在文件,java,filenotfoundexception,Java,Filenotfoundexception,我设置了方法来尝试/捕获此错误。我的问题是,即使我在同一个包中显式创建了Trivia.txt,它也会捕获Trivia.txt的fileNotFoundException。我不明白为什么找不到这个文件。我四处寻找我的问题的答案,但运气不好。不管怎样,这是我的代码 public static void readFile(){ try{ File file = new File("Trivia.txt"); FileReader fr = new FileRea

我设置了方法来尝试/捕获此错误。我的问题是,即使我在同一个包中显式创建了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");
    }


}

这里的代码只是由WindowComp类(完全不相关的类)静态调用的TextHandler类的一个方法。这个包是mainPackage,它包含main()和WindowComp()以及textHandler()以及Triva.Txt文件。按照打开文件的方式,应该在当前工作目录中找到它,而不是在找到源文件的子目录中


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

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


请尝试
System.out.println(file.getCanonicalPath())
,以找出代码需要文件的位置。

尝试将文件作为资源加载,如下所示

URL fileURL = this.getClass().getResource("Trivia.txt");
File file = new File(fileURL.getPath());
这将从加载资源的类的同一个包中加载文件

您还可以使用提供文件的绝对路径

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

尝试将文件作为资源加载,如下所示

URL fileURL = this.getClass().getResource("Trivia.txt");
File file = new File(fileURL.getPath());
这将从加载资源的类的同一个包中加载文件

您还可以使用提供文件的绝对路径

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

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

File file = new File("path/to/file/Trivia.txt");
您也可以使用不同的构造函数,如此答案中所示:

有关更多信息,请参阅以下文档:

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

File file = new File("path/to/file/Trivia.txt");
您也可以使用不同的构造函数,如此答案中所示:

有关更多信息,请参阅以下文档:

你说的“在包中创建”是什么意思?请显示你的目录结构。你说的“在包中创建”是什么意思?请显示你的目录结构。我发现
getAbsolutePath()
通常也能正常工作,抛出的异常更少。我发现
getAbsolutePath()
通常也能正常工作,并抛出更少的异常。