使用 ClassLoader 加载资源

Resource loading using ClassLoader

我有一个资源文件需要在运行时加载...它在 src/main/resources

我已经使用 :

成功地将文件加载到 inputStream
LoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");

LoadSAC 是 class 名字 ...

但是,PMD 抱怨这建议我使用

Thread.currentThread().getContextClassLoader().getResource(...)

我尝试了多种组合,但始终无法找到文件...任何想法...我已经进行了多次搜索并提供了大量建议,但 none 似乎有效...

有什么想法吗?

如果 someFile.txtLoadSAC.java 在同一个文件夹中,您可以:

InputStream is = LoadSAC.class.getResourceAsStream("someFile.txt");

如果 someFile.txt 在子文件夹 subdir 中,您可以:

InputStream is = LoadSAC.class.getResourceAsStream("subdir/someFile.txt");

如果您在 LoadSAC.java 中的方法是非静态的,您可以将 LoadSAC.class.getResourceAsStream... 替换为 getClass().getResourceAsStream...

使用antmaven进行编译时要小心,默认情况下,只有.java个文件被复制为构建目录中的.class个文件。

您必须编写一些规则以在最后的 jar 中包含 someFile.txt

在您的 resource 目录中,您可以像这样添加一个小助手 class:

import java.io.InputStream;
import java.net.URL;

import javax.activation.DataSource;
import javax.activation.URLDataSource;

public abstract class ResourceHelper {

    public static URL getURL(String name) {
        return ResourceHelper.class.getResource(name);
    }

    public static InputStream getInputStream(String name) {
        return ResourceHelper.class.getResourceAsStream(name);
    }

    public static DataSource getDataSource(String name) {
        return new URLDataSource(getURL(name));
    }
}

LoadSAC.java中调用:

InputStream is = ResourceHelper.getInputStream("someFile.txt");