【问题标题】:Load file from classpath in wildfly +java从wildfly +java中的类路径加载文件
【发布时间】:2020-12-14 15:02:35
【问题描述】:

我有一个简单的 jsp 应用程序。 我正在尝试在 src/xml 文件夹中加载一个 xml 文件。我正在使用下面的代码,但得到 FileNotFound 异常。请告诉我如何解决这个问题?

Public static void load() {
Document doc = parseDoc(Thread.currentThread().getContextClassLoader().getResource("/xml/test.xml").getFile())
}

这是抛出 FileNotFound 异常,因为路径显示为 /D:/Wildfly/bin/content/aap.war/web-inf/classes/xml/test.xml

尝试了几种不同的方法,但没有奏效。请帮帮我

【问题讨论】:

  • getResource(…) 返回一个URL。无法保证这是默认文件系统中的文件。最值得注意的是,它不会在代码部署在 jar 文件中时出现。检查是否有parseDoc 的版本接受URLInputStream(因为您可以在URL 上调用openStream() 或首先使用getResourceAsStream(…)

标签: java jsp java-8 jboss wildfly


【解决方案1】:

一般说明:

请写 public 而不是 Public。 “src”不是加载某些东西的好文件夹。 “src”通常包含您的源代码(又名 *.java 文件)——在文件编译并放入服务器后,您无权访问。

我的建议是,您将 XML 文件放入 jar 文件中。因此,压缩您的 xml 文件夹并将其重命名为例如“xml.jar”。我假设有一个文件夹 xml/test.xml。这个 jar 文件作为 .ear 或 .war 文件的一部分添加到类路径中。部署后,您可以通过以下方式访问它:

Thread.currentThread().getContextClassLoader().getResourceAsStream("xml/text.xml");

也不要直接读取它而是检查null:

InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("xml/text.xml);
if (stream == null) {
  throw new IllegalStateException("Resource 'xml/text.xml' not found on classpath");
}
//continue

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多