Java:无论应用服务器如何,通用访问资源文件

标签 java weblogic wildfly

我正在寻找访问资源文件(例如一堆 .xml 文件)以及它们所在的文件夹结构的“最佳实践”方法,无论使用什么应用程序服务器。

现在我正在使用 Wildfly 8 服务器,我通过获取应用程序真实路径然后使用 Paths.get(resourcePath) 来访问所有 src/main/resources/xxxx > 以及 Files.walk(Paths.get(folderPath)) 如果我想访问文件夹的文件。

但是,当我尝试部署到 Weblogic 12c 时遇到了问题,因为此应用程序服务器实际上获取了 WEB-INF/classes 下的所有内容并创建了 .jar文件并将其添加到WEB-INF/lib。我仍然可以使用 classLoader.getResource(resourcePath) 访问单一资源,但由于某种原因,当我尝试创建 new File(Paths.get(resourcePath) 或使用 >Files.walk(Paths.get(folderPath)) 它似乎不起作用。它抛出一个异常,说文件不存在,我猜测是因为它不可访问,因为它是打包在 jar 文件内。

我可能会使用classLoader.getResource(resourcePath)来访问我的所有资源,但不幸的是,就我而言,我无法知道编译时哪些资源可用。我特别需要能够浏览选定文件夹的文件和子文件夹,但我还没有找到在两个应用程序服务器或所有应用程序服务器上执行此操作的通用方法。

如果解决方案使用新的 File api 而不是创建一堆 FileReader,则会获得加分,但我也同意这一点。

最佳答案

您可以将 XML 文件放在文件夹 /WEB-INF/xml 中,然后使用 ServletContext 获取 File该位置的路径

变体 1:

调用 servletContext.getResourceUrl("/WEB-INF/xml") 获取 URL 并将该 URL 转换为 File路径。但根据服务器的不同,这可能会返回非文件资源 URL,例如jndi:/ url。

变体 2:

调用 servletContext.getRealPath("/WEB-INF/xml") 获取文件字符串,并将该 URL 转换为 FilePath.

关于Java:无论应用服务器如何,通用访问资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808119/

相关文章:

java - 为什么扫描仪中缺少输入的最后一个元素?

java - 使用按钮启动和停止线程

java - java中的hashmap在哪些情况下会丢失一些条目?

java - ejb-jar.xml : Allowed Methods for container-transaction tag

启用 RBAC 时,Java 表单登录不起作用

java - 如何在多个 JTextfield 上调用 `setText`?

java - Java中有没有一种简单的方法来组合工厂?

weblogic - 如何查找Weblogic位版本?

java - Wildfly 17 : "User-specified log class ' org. apache.commons.logging.impl.Log4JLogger'找不到或无法使用。”使用commons-configuration2

intellij-idea - 如何使用 IntelliJ IDEA 中的 standalone-full.xml 运行 WildFly?