src / main / resources中的FileNotFoundException

时间:2014-05-08 16:32:23

标签: java maven filenotfoundexception

我在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下的classpath。 那么为什么程序无法在这里找到文件呢?

4 个答案:

答案 0 :(得分:19)

如果你打算在类路径中打包文件,那么从类路径中读取它..

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

enter image description here

enter image description here

答案 1 :(得分:4)

请将此作为您的路径:

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

答案 2 :(得分:1)

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

解决方案是仅重命名文件夹,使其没有空格。

答案 3 :(得分:0)

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

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

有关详细信息,请参阅Class#getResoucesAsStream