java - 使用 ClassLoader 加载资源

标签 java classloader

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

我已经成功地将文件加载到一个 inputStream 中:

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

LoadSAC是类名...

但是,PMD 提示这建议我使用

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

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

有什么想法吗?

最佳答案

如果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...

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

你必须写一些规则来包含someFile.txt在 final 中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");

关于java - 使用 ClassLoader 加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52132803/

相关文章:

java - 在java中使用elasticsearch函数制作json

java - 两种相似的方法,不同的行为 setSchema 都没有失败,但第二种情况下是 MySQL 异常?

Java:找不到适合 jdbc:h2 的驱动程序

java - ClassLoader 似乎没有正确返回对象

java - 不同Jar/类加载器之间的通信

java - 创建一个简单、简单的游戏引擎

java - Base64转字节数组解码优化——Java

java - 获取所有受马影响的字段作为点数组

java - 在独立部署或在ear中部署的war文件中查找资源(.txt文件)

java - 实例化 XMLStreamWriterFactory 失败 : unsupported property isRepairingNamespaces