如何从资源文件夹中获取文件。 Spring框架

时间:2016-04-04 16:05:02

标签: java spring-mvc java-io fileinputstream

我正在尝试解组我的xml文件:

public Object convertFromXMLToObject(String xmlfile) throws IOException {
    FileInputStream is = null;
    File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml")));
    try {
        is = new FileInputStream(file);
        return getUnmarshaller().unmarshal(new StreamSource(is));
    } finally {
        if (is != null) {
            is.close();
        }
    }
}

但是我得到了这个错误: java.io.FileNotFoundException:null(没有这样的文件或目录)

这是我的结构:

enter image description here

为什么我无法从资源文件夹中获取文件?感谢。

更新

重构后,

URL url = this.getClass()。getResource(“/ xmlToParse / companies.xml”);         文件文件=新文件(url.getPath());

我可以更清楚地看到错误:

java.io.FileNotFoundException:/content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml(没有这样的文件或目录)

它试图找到WEB-INF / classes / 我在那里添加了文件夹,但仍然收到此错误:(

enter image description here

3 个答案:

答案 0 :(得分:44)

我在尝试将一些XML文件加载到我的测试类时遇到了同样的问题。如果您使用Spring,可以从您的问题中建议,最简单的方法是使用org.springframework.core.io.Resource - 已提到的Raphael Rot h。

代码非常简单。只需声明org.springframework.core.io.Resource类型的字段并使用org.springframework.beans.factory.annotation.Value进行注释 - 就像这样:

@Value(value = "classpath:xmlToParse/companies.xml")
private Resource companiesXml;

要获得所需的InputStream,只需调用

即可
companiesXml.getInputStream()

你应该没问题:)

但请原谅我,我要问一件事:你为什么要在Spring的帮助下实现XML解析器?有很多内容:)例如。对于Web服务,有很好的解决方案可以将您的XML编组到Java Objects中并返回...

答案 1 :(得分:12)

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("fileName").getFile());

答案 2 :(得分:0)

你应该给出一个绝对路径(所以添加一个加载'/',其中resource-folder是根文件夹):

public Object convertFromXMLToObject(String xmlfile) throws IOException {
    FileInputStream is = null;
    File file = new File(String.valueOf(this.getClass().getResource("/xmlToParse/companies.xml")));
    try {
        is = new FileInputStream(file);
        return getUnmarshaller().unmarshal(new StreamSource(is));
    } finally {
        if (is != null) {
            is.close();
        }
    }
}