我需要打开一个maven jar包内的文件。它是我使用的框架的模型配置,库类的构造函数需要传递类型为 File 的对象。我可以使用类加载器获得配置文件的路径,没有任何问题。但是 - 不幸的是 - File 无法读取jar内的文件。所以我得到 java.io.FileNotFoundException 。现在我正在为这个问题寻找解决方案。我的计划是解压缩模型配置文件并将其放在临时目录中。但是,在开始编码之前,我想了解是否有任何其他解决方案可以解决像我这样的问题。
更新:我需要在运行时读取文件。
答案 0 :(得分:4)
如果您是从maven构建中执行此操作,请使用
将jar资源解压缩到文件中 dependency:unpack-dependencies
(如果jar是项目的maven依赖项之一)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>the.groupId</includeGroupIds>
<includeArtifactIds>the.artifactId</includeArtifactIds>
<includes>**/path/to/your/resource.txt</includes>
<outputDirectory>where/do/you/want/it</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
或使用
dependency:unpack
(如果jar没有依赖关系,但仍可作为maven工件使用)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>the.groupid</groupId>
<artifactId>the.artifactid</artifactId>
<version>the.version</version>
<type>jar</type>
<outputDirectory>where/do/you/want/it</outputDirectory>
<includes>**/path/to/your/resource.txt</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:3)
我认为你应该使用JarInputStream,逐个遍历JAR条目,直到找到你需要的东西。然后只找到read()
的{{1}}内容。