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

新手上路,请多包涵

我正在尝试解组我的 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 (No such file or directory)

这是我的结构:

在此处输入图像描述

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

更新。

重构后,

网址 url = this.getClass().getResource(“/xmlToParse/companies.xml”);文件 file = new File(url.getPath());

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

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

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

在此处输入图像描述

原文由 Tom Wally 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 647
1 个回答

我在尝试将一些 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 对象并返回……

原文由 jonashackt 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题