我正在寻找访问资源文件(例如一堆 .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 转换为 File
或 Path
.
关于Java:无论应用服务器如何,通用访问资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808119/