使用ClassLoader加载资源

问题描述 投票:3回答:1

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

我已成功将文件加载到inputStream:

LoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");

LoadSAC是班级名称......

然而,PMD抱怨这表明我使用

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

我已经尝试了很多组合,永远无法找到文件...任何想法...我已经通过大量的建议进行了一些搜索,但似乎没有任何工作......

有什么想法吗 ?

java classloader
1个回答
0
投票

如果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文件。

你必须写一些规则,在最后的someFile.txt中加入jar

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

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");
© www.soinside.com 2019 - 2024. All rights reserved.