我正在构建一个WAR / EAR,我的一个组件使用File IO读入许多自定义配置文件:
Reader reader = new BufferedReader(new FileReader(path));
上面的路径是一个String,它通过Spring的 applicationContext.xml 文件作为属性传递给该类。
如果我想将所有这些配置文件放在WAR中,我指定了什么字符串路径?甚至可以这样做吗?或者组件是否错误,应该使用getResourceAsStream()
代替?
我浏览了一下,在getResource()
和 URI 上找到了很多信息。但是,我无法找到是否可以在 applicationContext.xml
答案 0 :(得分:5)
在春天的环境中,最好使用spring resources API 简单的例子:
@Inject
private ResourceLoader resourceLoader;
public void someMethod() {
Resource resource = resourceLoader.getResource("file:my-file.xml");
InputStream is = null;
try {
is = resource.getInputStream();
// do work
....
} finally {
IOUtils.closeQuetly(is);
}
}
如果要访问具有非固定路径的外部文件(非类路径资源,应位于存档中的META-INF /资源中),则应将此类路径放在主属性文件中并将其加载到app deploy上。
编辑:在示例中将@Resource更改为@Inject
答案 1 :(得分:2)
访问文件的关键是在类路径中使它们可用。默认情况下,在WAR文件中,WEB-INF / classes下的所有文件都会添加到类路径中,您可以引用这些文件。
例如:假设这是您的WAR文件结构
webapp.war
|
|---> WEB-INF
|------|
| |----> classes
| |----> MyResource.properties
|---> index.html
|---> images
|-------|
| ----> logo.gif
您可以使用以下API访问“MyResource.properties”
Reader reader = new BufferedReader(new FileReader("MyResource.properties"));
希望这有帮助。
祝你好运!