我有一个资源文件需要在运行时加载...它在src/main/resources
我已经成功地将文件加载到一个 inputStream 中:
LoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");
LoadSAC
是类名...
但是,PMD 提示这建议我使用
Thread.currentThread().getContextClassLoader().getResource(...)
我尝试了多种组合,但始终无法定位文件...任何想法...我已经进行了多次搜索并提供了大量建议,但似乎都没有用...
有什么想法吗?
最佳答案
如果someFile.txt
与 LoadSAC.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/