Maven包打开jar包中的文件(作为*file*)

Maven包打开jar包中的文件(作为*file*),file,maven-2,jar,maven,File,Maven 2,Jar,Maven,我需要打开maven jar包中的一个文件。它是我使用的框架的模型配置,库类的构造函数需要传递File类型的对象。我可以使用类加载器获得配置文件的路径,没有任何问题。但——不幸的是——文件无法读取jar中的文件。所以我得到java.io.FileNotFoundException。现在我正在寻找解决这个问题的方法。我的计划是解压缩模型配置文件并将其放在临时目录中。然而,在开始编码之前,我想知道是否有任何其他解决方案可以解决像我这样的问题 更新:我需要在运行时读取文件 如果您是从maven构建中执

我需要打开maven jar包中的一个文件。它是我使用的框架的模型配置,库类的构造函数需要传递File类型的对象。我可以使用类加载器获得配置文件的路径,没有任何问题。但——不幸的是——文件无法读取jar中的文件。所以我得到java.io.FileNotFoundException。现在我正在寻找解决这个问题的方法。我的计划是解压缩模型配置文件并将其放在临时目录中。然而,在开始编码之前,我想知道是否有任何其他解决方案可以解决像我这样的问题


更新:我需要在运行时读取文件

如果您是从maven构建中执行此操作,请使用

  • (如果jar是项目的maven依赖项之一)


    • 我认为您应该使用,一个接一个地遍历JAR条目,直到找到您需要的内容。然后只需
      read()
      找到的
      JarEntry的内容

      ,如果库需要一个文件,这将不会有帮助。那么,您可以从JAR中
      read()
      并保存到一个临时
      文件
      。即使在这种情况下,它也比将JAR解包到项目中更有效。感谢您的提示,它让我能够解决我的问题。我使用ClassLoader查找文件(jar文件中的路径),将其解压到临时目录中,并将其作为文件打开。您需要在构建时或运行时从jar文件中提取/读取该文件吗?下面有两个很好的答案,但它们都是在开发和运行时过程中的不同点完成任务的。
      <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>
      
      <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>