【问题标题】:Getting FileNotFoundException获取 FileNotFoundException
【发布时间】:2014-04-20 13:22:59
【问题描述】:

我有一个使用以下代码的 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 项目”时,我不必提供完整路径,但是当我有“动态 Web 项目”时,如果我不提供文件的完整绝对路径,则会收到错误消息。

注意:我使用的是 Eclipse IDE。

【问题讨论】:

  • @ᴋᴇʏsᴇʀ: 谢谢 :) 我现在改了。
  • 找出它从哪个路径运行。这可能是一个意想不到的
  • 尝试在文件名new FileReader("/queryWords.txt")前加一个/
  • @Vinz243:不,它不起作用..
  • 尝试System.out.println(new File("").getAbsolutePath());查看默认目录。

标签: java eclipse file filenotfoundexception


【解决方案1】:

“当我的项目只是“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));

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多