【问题标题】:FileNotFoundException in src/main/resourcessrc/main/resources 中的 FileNotFoundException
【发布时间】:2014-06-26 04:23:17
【问题描述】:

我在 src/main/resources 下的 maven 项目中放置了一个文件 文件名就是 temp.txt。

当我尝试打开文件时:

BufferedReader br = new BufferedReader(new FileReader(new File("./temp.txt")));

我收到一个错误:

Exception in thread "main" java.io.FileNotFoundException: \temp.txt

src/main/resources 下的所有文件都放在 maven下的类路径。 那为什么程序在这里找不到文件呢?

【问题讨论】:

  • 你需要'.'吗?
  • 那没有任何改变。这 '。'只是说当前目录。没有 '。'和'.'一样。
  • 无论如何都尝试删除它

标签: java maven filenotfoundexception


【解决方案1】:

如果您要将文件打包到类路径中,那么从类路径中读取它。

Maven 结构

src
   main
       resources
               file.txt

构建后,文件被放置在类路径的根目录中。所以使用

InputStream is = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));

file.txt 前面的 / 会将您带到根目录,无论类位于哪个包中。


更新

测试示例

package com.underdogdevs.stackoverflow;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class TestResourceFile {

    public static void main(String[] args) throws IOException {
        InputStream is = TestResourceFile.class.getResourceAsStream("/test.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }
}

【讨论】:

  • 你的文件在src/main/resources/file.txt?
  • @Mulgard 查看我的更新
  • 检查您的构建并验证文件是否正确复制。是不是有错别字?
  • 使用/ = null。没有/ = NullPointerException?
【解决方案2】:

只要把它作为你的路径:

BufferedReader br = new BufferedReader(new FileReader(new 
File("src/main/resources/temp.txt")));

【讨论】:

  • 导出项目后这将不起作用。部署项目后,您将无法再访问源代码(src 目录)。如果您将文件放入资源目录,则应将它们作为类路径资源读取。
【解决方案3】:

在 Jenkins 中设置集成测试时遇到此问题。
该问题是由于将作业放在名称中带有空格的文件夹中引起的。因此,Jenkins 没有创建一个名为 foo bar 的工作区文件夹,而是创建了 foo%20bar,并且所有测试都以 FileNotFoundException 失败。

解决方案只是重命名您的文件夹,使其没有任何空格。

【讨论】:

    【解决方案4】:

    Maven 将/src/main/resouces/ 下的文件放入类路径的默认包中。因此,您可以通过类加载器加载:

    InputStream in = getClass().getResourcesAsStream("temp.txt")
    

    有关更多信息,请参阅Class#getResoucesAsStream

    【讨论】:

    • 同样的异常。以及我以相同方式加载的所有其他文件,并且效果很好。
    猜你喜欢
    • 2015-03-22
    • 2014-09-25
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2015-02-26
    • 2013-08-04
    相关资源
    最近更新 更多