2

我有一个单元测试包,其中保存了一些 txt 文件。这些通过调用加载getClass().getResource(file);,它工作得很好。我在同一个文件夹中添加了一个 csv 文件,如果我提供它的名称作为参数,即getClass().getResource("csvFile.csv");我得到 null ......任何想法为什么?

4

2 回答 2

4

当你使用

 getClass().getResource("csvFile.csv");

它看起来与班级有关。

当你使用

 getClass().getClassLoader().getResource("csvFile.csv");

它在您的类路径的顶级目录中查找。

我怀疑你想要第二种形式。

Class.getResource(String)

在委托之前,使用以下算法从给定的资源名称构造一个绝对资源名称:

  • 如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。
  • 否则,绝对名称的格式如下:

    modified_pa​​ckage_name/name

    其中 modified_pa​​ckage_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 回答