我有一个单元测试包,其中保存了一些 txt 文件。这些通过调用加载getClass().getResource(file);
,它工作得很好。我在同一个文件夹中添加了一个 csv 文件,如果我提供它的名称作为参数,即getClass().getResource("csvFile.csv");
我得到 null ......任何想法为什么?
问问题
4602 次
2 回答
4
当你使用
getClass().getResource("csvFile.csv");
它看起来与班级有关。
当你使用
getClass().getClassLoader().getResource("csvFile.csv");
它在您的类路径的顶级目录中查找。
我怀疑你想要第二种形式。
在委托之前,使用以下算法从给定的资源名称构造一个绝对资源名称:
- 如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。
否则,绝对名称的格式如下:
modified_package_name/name
其中 modified_package_name 是此对象的包名称,其中 '/' 替换为 '.' ('\u002e')。
如您所见,使用了类的包名的目录翻译。
例如,我有一个 maven 项目,其中代码位于src/main/java
. 我的资源目录src/main/resources
我添加csvFile.csv
到我的资源目录中,该目录将被复制到我的类路径中。
public class B {
B() {
URL resource = getClass().getClassLoader().getResource("csvFile.csv");
System.out.println("Found "+resource);
}
public static void main(String... args) {
new B();
}
}
哪个打印
Found file:/C:/untitled/target/classes/csvFile.csv
这是maven从资源目录构建的区域。
于 2012-08-21T13:31:52.460 回答
0
你试过吗getClass().getClassLoader().getResourceAsStream(file)
这反过来又返回一个输入流,你可以用它来访问文件
于 2012-08-21T13:41:03.267 回答