2010-11-26 64 views
2

我需要打開maven jar包內的文件。它是我使用框架的模型配置,庫類的構造函數需要傳遞類型的文件。我可以使用類加載器獲取配置文件的路徑,而不會有任何問題。但 - 不幸的是 - 文件無法讀取jar中的文件。所以我得到java.io.FileNotFoundException。現在我正在尋找解決這個問題的方法。我的計劃是解壓縮模型配置文件並將其放置在臨時目錄中。但是,在開始編碼之前,我想知道是否有像我這樣的問題的其他解決方案。Maven包在jar包內打開文件(作爲* File *)

更新:我需要在運行時讀取文件。

+0

您是否需要在構建時或運行時從JAR文件中提取/讀取文件?您在下面有兩個很好的答案,但都在開發和運行時流程的不同位置完成任務。 – jgifford25 2010-12-20 15:05:26

回答

3

我認爲你應該使用JarInputStream,通過JAR條目一一遍歷,直到你找到你所需要的。然後只是read()的內容找到了JarEntry

+0

如果圖書館需要一個文件,這將無濟於事 – 2010-12-20 13:52:40

4

如果你從一個Maven構建這樣做,解壓的jar資源使用文件

  • dependency:unpack-dependencies(如果jar是項目的行家dependenies之一)

    <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(如果罐子沒有依賴性,但仍可以作爲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>