鍍金池/ 教程/ Java/ Java jar文件
Java文件屬性
Java FilePermission示例
Java Externalizable實(shí)例
Java文件操作
Java文件鎖
Java文件系統(tǒng)
Java異步I/O
Java Reader/Writer
Java File實(shí)例
Java FileReader示例
Java控制臺(tái)
Java文件所有者權(quán)限
Java通道
Java ByteArrayOutputStream示例
BufferedOutputStream示例
Java FileInputStream示例
Java DataInputStream
Java BufferedInputStream
Java Jar Manifest
Java Console類示例
BufferedWriter示例
Java輸入/輸出教程
Java對(duì)象序列化
Java文件教程
Java DataInputStream類型
Java Zip字節(jié)數(shù)組
Java FileWriter示例
FileOutputStream示例
Java PrintStream
Java Scanner類
BufferedInputStream示例
Java字符集
ByteArrayInputStream示例
Java路徑操作
Java DataOutputStream
Java符號(hào)鏈接
Java FilterWriter示例
Java Jar API
BufferedReader實(shí)例
Java Pipe(管道)
Java jar文件
Java CharArrayReader示例
Java CharArrayWriter示例
Java PushbackInputStream
Java FilterReader示例
Java zip文件
Java InputStream
Java標(biāo)準(zhǔn)輸入/輸出/錯(cuò)誤流
Java文件內(nèi)容和讀寫
Java FilterInputStream示例
Java內(nèi)存通道
Java路徑
Java令牌和字符串拆分
Java隨機(jī)訪問文件
Java文件樹
Java緩沖區(qū)讀寫
Java FileOutputStream
Java目錄事件
Java FilterOutputStream示例
Java DataOutputStream實(shí)例
FileDescriptor示例

Java jar文件

JAR文件格式

JAR(Java Archive)是基于ZIP文件格式的文件格式。

它用于捆綁Java應(yīng)用程序或小程序的資源,類文件,聲音文件,圖像等。 它還提供數(shù)據(jù)壓縮。一個(gè)JAR文件作為一種特殊類型的ZIP文件??梢詫?duì)JAR文件的內(nèi)容進(jìn)行數(shù)字簽名,以提供安全性。 它提供了一個(gè)平臺(tái)無關(guān)的文件格式。

可以使用JAR API在Java程序中處理JAR文件。JAR文件可以具有可選的META-INF目錄,以包含包含應(yīng)用程序配置信息的文件和目錄。

META-INF目錄

下表列出了META-INF目錄中的條目。

名稱 類型 目的
MANIFEST.MF 文件 它包含擴(kuò)展和包相關(guān)數(shù)據(jù)。
INDEX.LIST 文件 它包含軟件包的位置信息。 類加載器使用它來加快類搜索和加載過程。
X.SF 文件 X是基本文件名。 它存儲(chǔ)jar文件的簽名。
X.DSA 文件 X是基本文件名。 它存儲(chǔ)相應(yīng)簽名文件的數(shù)字簽名。
/services 目錄 此目錄包含所有服務(wù)提供程序配置文件。

Jar工具

JDK提供了一個(gè)jar工具來創(chuàng)建和操作JAR文件。還可以使用java.util.jar包中的類使用Java API創(chuàng)建和操作JAR文件。

JAR API有一些新類來處理清單文件。Manifest類表示清單文件。要使用jar工具創(chuàng)建JAR文件,許多命令行選項(xiàng)都可用。
以下代碼列出了jar工具的命令行選項(xiàng)。

選項(xiàng) 描述
-c 創(chuàng)建一個(gè)新的JAR文件。
-u 更新現(xiàn)有的JAR文件。
-x 從JAR文件中提取命名文件或所有文件。
-t 列出JAR文件的目錄。
-f 指定JAR文件名。
-m 包括來自指定文件的清單信息。
-M 不要?jiǎng)?chuàng)建清單文件。
-i 為指定的JAR文件生成索引信息。它在JAR文件中的META-INF目錄下創(chuàng)建一個(gè)INDEX.LIST文件。
-0 不要壓縮JAR文件中的條目。 只存儲(chǔ)它們,選項(xiàng)值為零,表示零壓縮。
-e 將指定的類名添加為清單文件主要部分中Main-Class條目的值。
-v 在標(biāo)準(zhǔn)輸出上生成詳細(xì)輸出
-C 切換到指定的目錄并在JAR文件中包括以下文件。 請(qǐng)注意,該選項(xiàng)為大寫(C)。 小寫字母(c)用于指示創(chuàng)建JAR文件選項(xiàng)。

創(chuàng)建JAR文件

使用以下命令創(chuàng)建一個(gè)帶有兩個(gè)名為A.classB.class類的JAR類型文件的test.jar

jar cf test.jar  A.class B.class

在上面的命令中,選項(xiàng)c表示創(chuàng)建一個(gè)新的JAR文件,選項(xiàng)f表示指定一個(gè)JAR文件名,這里是:test.jar。

在命令結(jié)束時(shí),可以指定要包括在JAR文件中的一個(gè)或多個(gè)文件名或目錄名。要查看test.jar文件的內(nèi)容,請(qǐng)執(zhí)行以下命令:

jar tf test.jar

選項(xiàng)t表示對(duì)JAR文件的目錄感興趣。選項(xiàng)f表示指定了JAR文件名,在這個(gè)示例中是test.jar。
上述命令將生成以下輸出:

META-INF/
META-INF/MANIFEST.MF A.class
B.class

jar命令自動(dòng)在META-INF目錄中創(chuàng)建了兩個(gè)額外的東西:一個(gè)名為META-INF的目錄和一個(gè)名為MANIFEST.MF的文件。

以下命令將通過在當(dāng)前工作目錄中包含所有內(nèi)容來創(chuàng)建test.jar文件。

jar cf test.jar  *

以下命令將創(chuàng)建一個(gè)JAR文件,其中包含book/archives目錄中的所有類文件以及book/images目錄中的所有圖片。

jar cf test.jar  book/archives/*.class  book/images

可以在創(chuàng)建JAR文件時(shí)使用命令行選項(xiàng)指定清單文件。Manifest文件是一個(gè)文本文件,其中包含JAR文件的所有列表?xiàng)l目。
Manifest文件必須在文件末尾有一個(gè)空行。 否則,將不處理列表文件中的最后一個(gè)條目。

以下命令將在創(chuàng)建test.jar文件(包括當(dāng)前目錄中的所有文件和子目錄)時(shí)使用manifest.txt文件。

上述命令中使用的選項(xiàng)的順序很重要。 f出現(xiàn)在m之前,必須在Manifest文件名manifest.txt之前指定JAR文件名test.jar。

可以按如下方式重寫上述命令:

jar cmf manifest.txt test.jar *

更新JAR文件

使用選項(xiàng)u更新現(xiàn)有的JAR文件條目或其Manifest文件。以下命令將向現(xiàn)有的test.jar文件添加一個(gè)C.class文件:

jar uf  test.jar  C.class

假設(shè)有一個(gè)test.jar文件,并且要將它的Manifest文件中的Main-Class條目更改為HelloWorld類??梢允褂靡韵旅睿?/p>

jar ufe  test.jar HelloWorld

在此命令中,選項(xiàng)u表示正在更新JAR文件; 選項(xiàng)f指示指定JAR文件名,即test.jar,選項(xiàng)e表示在test.jar文件中為MANIFEST.MF文件指定Main-Class條目的值為HelloWorld。

索引JAR文件

可以為JAR文件生成一個(gè)索引文件。 它用于加快類加載。在創(chuàng)建JAR文件后,必須在單獨(dú)的命令中使用選項(xiàng)ijar命令。

jar i test.jar

此命令將向test.jar文件添加一個(gè)META-INF/INDEX.LIST文件??梢酝ㄟ^使用以下命令列出test.jar文件的目錄來驗(yàn)證它:

jar tf test.jar

提取JAR文件

要從JAR文件中提取所有或部分條目,請(qǐng)使用選項(xiàng)xjar命令。從test.jar文件中提取所有條目如下 -

jar xf  test.jar

選項(xiàng)x是從JAR文件中提取條目。選項(xiàng)f指定文件名,在這個(gè)示例中它是test.jar。
上述命令將從當(dāng)前工作目錄中的test.jar文件中提取所有條目。它將創(chuàng)建與test.jar文件中存在的相同的目錄結(jié)構(gòu)。要從JAR文件中提取單個(gè)條目,請(qǐng)?jiān)诿罱Y(jié)尾處列出它們。 條目應(yīng)該用空格分隔。

以下命令將從test.jar文件中提取A.classbook/HelloWorld.class條目:

jar xf  test.jar A.class  book/HelloWorld.class

要從book目錄中提取所有類文件,可以使用以下命令:

jar xf  test.jar  book/*.class

列表JAR文件內(nèi)容

使用選項(xiàng)tjar命令來列出標(biāo)準(zhǔn)輸出上的JAR文件的目錄。

jar tf test.jar