我有一个需要在运行时加载的资源文件...它位于src/main/resources
我已成功使用以下命令将文件加载到inputStream中:
LoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");
LoadSAC
是类名...
但是,PMD抱怨这表明我使用了
Thread.currentThread().getContextClassLoader().getResource(...)
我尝试了多种组合,但是无法找到文件...任何想法...我在大量搜索中提出了很多建议,但似乎都没有效果...
有什么想法吗?
答案 0 :(得分:0)
如果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");