正在获取FileNotFoundException



我有一个Web项目,我正在使用以下代码:

try {
    br1 = new BufferedReader(new FileReader("queryWords.txt"));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

现在,它给我抛出了以下异常:

java.io.FileNotFoundException: queryWords.txt (The system cannot find the file specified)

(我将"queryWords.txt"文件存储在项目文件夹中)

当我将代码更改为以下内容时:

br1 = new BufferedReader(new FileReader("C://Users//Project//Demo//queryWords.txt"));

在我给出完整绝对路径的地方,它运行得很好,但当我将我的项目更改为平面"Java项目"时,初始代码运行得非常好,我没有遇到任何异常。

那么,为什么会发生这种意想不到的行为呢?当我的项目只是"Java项目"时,我不必提供完整的路径,但当我有"Dynamic Web project"时,如果我不提供文件的完整绝对路径,就会出现错误。

注意:我使用的是Eclipse IDE。

"当我的项目只是‘Java项目’时,我不必提供完整的路径"

您的IDE正在从工作目录中读取文件,该目录通常是项目根目录。

"当我有‘动态Web项目’时,如果我没有给出文件的完整绝对路径,我就会得到错误"

Web应用程序被打包到.war(.jar)中。一旦构建了应用程序,src中的文件就会包含在类路径中,并且应该按原样读取。在您的案例中,您的文件从未包含在jar中,因为它不是src中的资源。即使从文件系统中读取文件可能在您的系统上工作,也没有其他使用该应用程序的人能够读取它

相反,您应该将资源放在src中,比如resources包。这取决于构建的结构,你应该提供什么路径,但我认为,对于一个正常的maven项目结构(文件在src/main/resources/myfile.txt中)和一个常规的java项目结构(src/resources/myfile.txt),你可以安全地使用以下

InputStream is = getClass().getResourceAsStream("/resources/myfile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));

相关内容

  • 没有找到相关文章

最新更新