我有一个资源文件需要在运行时加载...它在src/main/resources
我已经成功地将文件加载到输入流中使用:
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
包含在最终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");