java - 获取 FileNotFoundException

标签 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 项目”时,我不必提供完整路径,但当我有“动态 Web 项目”时,如果不提供文件的完整绝对路径,我会收到错误。

注意:我使用的是 Eclipse IDE。

最佳答案

"When my project is just 'Java Project' I don't have to provide the full path"

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

"when I have the 'Dynamic Web Project', I am getting the error if I don't give the full absolute path of the file"

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

关于java - 获取 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23182968/

相关文章:

c - 我正在尝试创建一个打开文件以在 C 中读取的函数

java - 运行调用 dll 的 Java 代码时出现 LibraryNotFoundException

java - 在单个项目中混合 java 和 scala - 在 scala 中进行测试,在 java 中进行核心

java - 如何获取当前 jsp 应用程序版本的内部版本号(使用 CVS)

java - 如何在 Activity 中加载插页式广告并在另一个 Activity 中显示?

java 和 jsp_session expired_redirect

java - 如何使用 javafx 执行 Timer 类,其中 javafx 对象发生变化

java - 在 Eclipse 的调试 View 中以单行显示数组

c - fscanf != eof Clang 编译器,异常行为

vb.net - 在面向对象编程中使用 .txt 文件的正确方法