And*_*wan 7 java jar file path java-ee
我有一个部署为EAR文件的J2EE应用程序,该文件又包含业务层代码(包括一些EJB)的JAR文件和Web层代码的WAR文件.EAR文件部署到JBoss 3.2.5,它解压缩EAR和WAR文件,但不解压缩JAR文件(这不是问题,只是FYI).
JAR文件中的一个文件是MS Word模板,其绝对路径需要传递给某些本机MS Word代码(使用Jacob,FWIW).
问题是,如果我尝试获取这样的文件(从JAR文件中的一些代码中):
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
Run Code Online (Sandbox Code Playgroud)
...然后java.io.File构造函数抛出IllegalArgumentException"URI不是分层的".URL和URI都具有相同的toString()输出,即:
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot
Run Code Online (Sandbox Code Playgroud)
这条路径的大部分在文件系统上是有效的,但其余路径不是(在JAR文件的内部):
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents
Run Code Online (Sandbox Code Playgroud)
获取此文件的绝对路径最简单的方法是什么?
我目前的解决方案是将文件复制到服务器的临时目录,然后使用副本的绝对路径:
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();
Run Code Online (Sandbox Code Playgroud)
我更喜欢不涉及复制文件的解决方案.