使用JAR API打包

前一篇文章有講JAR的解析。流程很簡單,創建JAR文件,用這個文件構建JarFile,然後,從JarFile中得到JarEntry的枚舉,這樣,就可以遍歷JarEntry,而得到字節流的方法也很簡答,JarFile提供了根據JarEntry獲取字節流的方法。

 

JarEntry枚舉時,會將JarFile中所有的文件列出來,其路徑爲相對路徑。例如:com/huayu/mtk/Gpio.class

 

打包的過程是逆向的;JarOutputStream提供了putnextEntry、closeEntry、write方法。

 

Entry的名稱,很顯然,是相對路徑名。不可能是絕對路徑名,也不可能是文件名(否則,Jar怎麼知道你要寫在哪裏!)

 

生成Jar文件時,是不需要構建JarFile的(JarFile沒有提供相關的API)。直接構建FileOutputStream和JarOutputStream就夠了。

 

疑問在於:我需要爲每個文件建立一個Entry,還是需要爲每一個目錄和文件建立一個Entry。

 

經過測試,Jar採用的是在生成Jar文件時爲每個目錄和文件建立一個Entry的方式;這就有點像我們在創建文件時,如果這個文件所在的目錄不存在,就需要先建立目錄一樣。當然,Jar如果採用另一種方式,我認爲也是合理的。

 

在網上拷貝了一段代碼,原來的代碼有一個BUG,改了 一下,測試OK;

 

 

 

另外,發現我生成的JAR比Eclipseme生成的JAR文件大1K左右字節。但是,都可以用。原因尚不確定。

發佈了145 篇原創文章 · 獲贊 4 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章