我在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。 那么为什么程序无法在这里找到文件呢?
答案 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);
}
}
}
答案 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。