Java-EE 中的 class.getResource() (wildfly)

nim*_*o23 1 wildfly jakarta-ee

我正在使用 Java-EE (Wildfly v.17)

我想访问位于WEB-INF/classes/config.txt.

我知道一种解决方案servletContext

但是,我想知道为什么一些常见的东西不起作用:

// prints: file:/Users/test/server/wildfly-17.0.1.Final/modules/system/layers/base/org/jboss/as/ejb3/main/timers/
// why does this point to "ejb3/main/timers" ???
log.info(User.class.getResource("/").toExternalForm());
Run Code Online (Sandbox Code Playgroud)

这些都不起作用,我总是得到java.lang.NullPointerException(找不到文件,但文件在那里!)

var resource = User.class.getResource("/config.txt");


var resource = User.class.getResource("/WEB-INF/classes/config.txt")


var resource = User.class.getResource("config.txt")


var resource = getClass().getResource("config.txt")


var resource = Thread.currentThread().getContextClassLoader().getResource("config.txt")
Run Code Online (Sandbox Code Playgroud)

我如何在 Wildfly 中使用getResource()getResourceAsStream()

(或者我应该把它放在哪里config.txt才能使用getResource()?)

Ste*_*e C 5

访问WEB-INF/classes/config.txt文件中数据的最简单方法是使用java.lang.Class.getResourceAsStream("/config.txt"),这已在您的第一个示例中介绍。

如果返回,null则该文件不存在。如果你正在使用Maven构建然后为此最常见的原因是放置config.txtsrc/main/java目录中,而不是src/main/resources

尝试使用java.lang.Class.getResource("/config.txt")将以失望告终,因为返回的 URL 可能包含一个难以使用或无法使用的方案,例如“jar://.. .”或“vfs://...”。您不能依赖 WildFly 为类加载器资源返回“file://..”样式的 URL。