首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在EAR中获取JAR中文件的绝对路径?

在EAR中获取JAR中文件的绝对路径?
EN

Stack Overflow用户
提问于 2009-04-27 00:32:22
回答 3查看 17.7K关注 0票数 8

我有一个作为EAR文件部署的J2EE应用程序,该文件包含一个用于业务层代码的JAR文件(包括一些EJB)和一个用于web层代码的WAR文件。EAR文件被部署到JBoss 3.2.5,它会解压EAR和WAR文件,但不会解压JAR文件(这不是问题,只是供参考)。

JAR文件中的一个文件是MS Word模板,其绝对路径需要传递给某些本地MS Word代码(使用Jacob、FWIW)。

问题是,如果我尝试像这样获取File (从JAR文件中的一些代码中):

代码语言:javascript
复制
URL url = getClass().getResource("myTemplate.dot");
File file = new File(url.toURI()); // <= fails!
String absolutePath = file.getAbsolutePath();
// Pass the absolutePath to MS Word to be opened as a document

..。然后,java.io.File构造函数抛出IllegalArgumentException "URI不是分层的“。URL和URI都有相同的toString()输出,即:

代码语言:javascript
复制
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot

路径的这一部分在文件系统上是有效的,但其余部分则无效(在JAR文件内部):

代码语言:javascript
复制
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents

获取此文件的绝对路径的最简单方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-27 00:38:14

我目前的解决方案是将文件复制到服务器的临时目录,然后使用复制的绝对路径:

代码语言:javascript
复制
File tempDir = new File(System.getProperty("java.io.tmpdir"));
File temporaryFile = new File(tempDir, "templateCopy.dot");
InputStream templateStream = getClass().getResourceAsStream("myTemplate.dot");
IOUtils.copy(templateStream, new FileOutputStream(temporaryFile));
String absolutePath = temporaryFile.getAbsolutePath();

我更喜欢不涉及复制文件的解决方案。

票数 6
EN

Stack Overflow用户

发布于 2009-04-27 01:01:52

除非要传递URI字符串的代码或应用程序接受指定jar/zip文件中位置的格式,否则将文件复制到临时位置可能是最好的解决方案。

如果这些文件经常被引用,您可能希望缓存提取文件的位置,并在每次需要它们时验证它们是否存在。

票数 1
EN

Stack Overflow用户

发布于 2009-04-27 01:30:30

您应该将内容复制到临时文件(可能使用缓存),因为尝试访问应用程序容器的内部文件是您希望避免的依赖项。甚至可能根本没有解压缩的文件(它可以直接从JAR加载)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/791897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档