我有一个资源文件,我需要在运行时加载...它在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
中加入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");