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

2022-09-02 00:18:33

我正在尝试取消我的 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”);File file = new File(url.getPath());

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

java.io.FileNotFoundException: /content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml (No such file or directory)

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

enter image description here


答案 1

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

代码非常简单。只需声明一个类型为 org.springframework.core.io.Resource 的字段,并使用 org.springframework.beans.factory.annotation.Value 对其进行注释 - 如下所示:

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

要获取所需的输入流,只需调用

companiesXml.getInputStream()

你应该没事:)

但是请原谅我,我必须问一件事:为什么你想在Spring的帮助下实现一个XML解析器?:)例如,对于Web服务,有非常好的解决方案可以将您的XML组合到Java对象中并返回...


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

推荐