如何使用字符串路径名在WAR中打开资源文件?

时间:2012-03-19 18:00:18

标签: java spring file-io war ear

我正在构建一个WAR / EAR,我的一个组件使用File IO读入许多自定义配置文件:

Reader reader = new BufferedReader(new FileReader(path));

上面的路径是一个String,它通过Spring的 applicationContext.xml 文件作为属性传递给该类。

如果我想将所有这些配置文件放在WAR中,我指定了什么字符串路径?甚至可以这样做吗?或者组件是否错误,应该使用getResourceAsStream()代替?

我浏览了一下,在getResource() URI 上找到了很多信息。但是,我无法找到是否可以在 applicationContext.xml

中创建正确的资源文件路径

2 个答案:

答案 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"));

希望这有帮助。

祝你好运!