获取FileNotFoundException

时间:2014-04-20 13:23:00

标签: java eclipse file 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项目”时,我不必提供完整的路径,但是当我拥有“动态网络项目”时,我收到错误,如果我不要给出文件的完整绝对路径。

注意:我正在使用Eclipse IDE。

1 个答案:

答案 0 :(得分:2)

  

"当我的项目只是' Java Project'我不必提供完整的路径"

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

  

"当我拥有动态网络项目'时,如果我没有提供文件的完整绝对路径,我就会收到错误"

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));