Java 如何从ear/war/jar读取文件?

Java 如何从ear/war/jar读取文件?,java,file,jax-rs,war,ear,Java,File,Jax Rs,War,Ear,我有一只耳朵,里面装着另一场战争。项目结构如下所示: project.ear |--解放党 |--META-INF |--project-web.war ||--META-INF ||--WEB-INF || |——班级 || | `--com |||`--示例 || | `--服务 || |`--ListPageService.class || |--lib || |--web.xml ||`--weblogic.xml |`--content.html `--project-services

我有一只耳朵,里面装着另一场战争。项目结构如下所示:

project.ear
|--解放党
|--META-INF
|--project-web.war
||--META-INF
||--WEB-INF
|| |——班级
|| | `--com
|||`--示例
|| | `--服务
|| |`--ListPageService.class
|| |--lib
|| |--web.xml
||`--weblogic.xml
|`--content.html
`--project-services.jar

在战争中,有一个JAX-RS类
ListPageService
,它需要读取
content.html
文件。如何访问该文件?

编辑:此答案不再适用于现在制定的问题。建议的方法仅用于从类路径获取资源


请查看
Class.getResourceAsStream
方法。它允许您访问在类路径中找到的文件。

编辑:这个答案不再适用于现在制定的问题。建议的方法仅用于从类路径获取资源


请查看
Class.getResourceAsStream
方法。它允许您访问类路径中的文件。

获取WAR文件中资源的常用方法是通过
ServletContext.getResource
getResourceAsStream
。通过声明用
javax.ws.RS.core.Context注释的字段,您应该能够访问JAX-RS类中的
ServletContext

@Context ServletContext servletContext;
然后在请求处理方法中,您可以说

URL content = servletContext.getResource("/content.html");
// alternatively
// InputStream content = servletContext.getResourceAsStream("/content.html");

获取WAR文件中资源的常用方法是通过
ServletContext.getResource
getResourceAsStream
。通过声明用
javax.ws.RS.core.Context注释的字段,您应该能够访问JAX-RS类中的
ServletContext

@Context ServletContext servletContext;
然后在请求处理方法中,您可以说

URL content = servletContext.getResource("/content.html");
// alternatively
// InputStream content = servletContext.getResourceAsStream("/content.html");

谢谢,但我面临下一个问题:如果我运行getClass().getResourceAsStream(“.”),绝对路径是C:\Oracle\middleware\user\U projects\domains\base\U domain\servers\AdminServer\tmp\U WL\U user\project ear\7epkmz\war\WEB-INF\lib\u WL\U cls\U gen.jar。这个jar只包含*.class文件,没有原始WAR的静态内容。有什么想法吗?您指定的名称与类的位置有关。当名称以/开头时,可以覆盖此项。要获取示例中的文件,请使用“/content.html”类路径根本不包含Web内容资源。我完全不明白为什么这个答案已经得到了4张赞成票。那是因为这个问题已经被编辑过了,资源之前就在类路径中。谢谢,但我面临下一个问题:如果我运行getClass().getResourceAsStream(“.”),绝对路径是C:\Oracle\middleware\user\u projects\domains\base\u domain\servers\AdminServer\tmp\u WL\u user\project ear\7epkmz\war\WEB-INF\lib\u WL\u cls\u gen.jar。这个jar只包含*.class文件,没有原始WAR的静态内容。有什么想法吗?您指定的名称与类的位置有关。当名称以/开头时,可以覆盖此项。要获取示例中的文件,请使用“/content.html”类路径根本不包含Web内容资源。我完全不明白为什么这个答案已经得到了4张赞成票。那是因为这个问题已经被编辑过了,资源以前在类路径中。你的树是不正确的;类文件应位于content.war/WEB-INF/classes中。那么,在您的war文件中content.html在哪里呢?确切地说-?您的树是不正确的;类文件应位于content.war/WEB-INF/classes中。那么,在war文件中,content.html到底在哪里?