使用 ClassLoader 加载资源



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

我已经成功地将文件加载到输入流中使用:

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

使用antmaven进行编译时要小心,默认情况下,仅将.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");

最新更新