最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從Java的jar文件中讀取數(shù)據(jù)的方法

 更新時間:2015年06月08日 16:46:42   作者:liuzx32  
這篇文章主要介紹了從Java的jar文件中讀取數(shù)據(jù)的方法,實例分析了java檔案文件的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了從Java的jar文件中讀取數(shù)據(jù)的方法。分享給大家供大家參考。具體如下:

Java 檔案 (Java Archive, JAR) 文件是基于 Java 技術(shù)的打包方案。它們允許開發(fā)人員把所有相關(guān)的內(nèi)容 (.class、圖片、聲音和支持文件等) 打包到一個單一的文件中。JAR 文件格式支持壓縮、身份驗證和版本,以及許多其它特性。

從 JAR 文件中得到它所包含的文件內(nèi)容是件棘手的事情,但也不是不可以做到。這篇技巧就將告訴你如何從 JAR 文件中取得一個文件。我們會先取得這個 JAR 文件中的文件目錄,然后讀取指定的文件。

如果你熟悉常見的 ZIP 格式,你會發(fā)現(xiàn) JAR 文件和它區(qū)別不大。JAR 文件提供了一個把多個文件打包到一個文件中的方法,而且被打包的每個文件都可以分別壓縮。JAR 文件可以添加一個被稱為 manifest  的東西,它們允許開發(fā)人員添加與內(nèi)容有關(guān)的其它信息。例如,manifest 可以指明由 JAR 文件中的哪一個文件開始運(yùn)行應(yīng)用程序,或者指定這個庫的版本等。

Java 2 SDK 標(biāo)準(zhǔn)版提供了一個 jar 工具,你可以通過它在控制臺下讀寫 JAR 文件。然后,也許有些時候你想在你的程序中讀寫 JAR 文件。(這篇技巧僅涉及了在程序中讀 JAR 文件的內(nèi)容。)非常高興,你可以做到,并且不需要考慮解壓的問題,因為類庫已經(jīng)幫你處理了。你要用到的類都在 java.util.jar 包中。這里要用到的主要的類是 JarFile 類,它是一個 .jar 文件自身的引用。其中的每個文件則由 JarEntry 引用。

現(xiàn)在開始,傳遞一個參數(shù)給 JarFile 的構(gòu)造函數(shù)創(chuàng)建一個 JarFile 實例,這個參數(shù)可能是 String 也可以是 File,它是一個 .jar 文件的位置:

復(fù)制代碼 代碼如下:
JarFile jarFile = new JarFile("thefile.jar");

或者

復(fù)制代碼 代碼如下:
File file = new File("thefile.jar");
JarFile jarFile = new JarFile(file);

它還有其它一些構(gòu)造函數(shù),支持身份驗證和標(biāo)記文件為刪除。不過這里不會涉及到這些構(gòu)造函數(shù)。

在你得到一個 JAR 文件的引用之后,你就可以讀了其內(nèi)容的目錄了。JarFile 的 entries 方法返回一個所有條目的 Enumeration 對象,你還可以從 manifest 文件中獲得它的屬性、身份驗證信息以及其它的信息,如條目的名稱和大小。

// 譯者注:enum 在 Java 5.0 中是關(guān)鍵字,所以該例在 5.0 中應(yīng)該編譯失敗
// 但英文原著發(fā)表于 Java 5.0 出現(xiàn)之前,所以可以使用 enum 作變量名
// 為忠于原著,這里未作修改
Enumeration enum = jarFile.entries();
while (enum.hasMoreElements()) {
  process(enum.nextElement());
}

以前提到過,每個個體都是一個 JarEntry。這個類有一些諸如 getName、getSize 和getCompressedSize 的方法。

讓我們舉例說明如何在程序中使用這些特性。下面的程序顯示 JAR 文件的內(nèi)容列表及各項的名稱、大小和壓縮后的大小。(這很類似于使用帶 "t" 和 "v" 參數(shù)的 jar 命令。)

import java.io.*;
import java.util.*;
import java.util.jar.*;
public class JarDir {
  public static void main (String args[]) 
    throws IOException {
    if (args.length != 1) {
      System.out.println("Please provide a JAR filename");
      System.exit(-1);
    }
    JarFile jarFile = new JarFile(args[0]);
    Enumeration enum = jarFile.entries();
    while (enum.hasMoreElements()) {
      process(enum.nextElement());
    }
  }
  private static void process(Object obj) {
    JarEntry entry = (JarEntry)obj;
    String name = entry.getName();
    long size = entry.getSize();
    long compressedSize = entry.getCompressedSize();
    System.out.println(name + " " + size + " " + compressedSize);
  }
}

如果你用 J2SE 1.4.1 中的 jce.jar 來試驗上述的 JarDir 程序,你應(yīng)該看像下面那樣的輸出 (在 ... 處應(yīng)該顯示更多文件):

META-INF/MANIFEST.MF  5315  1910
META-INF/4JCEJARS.SF  5368  1958
META-INF/4JCEJARS.DSA  2207  1503
META-INF/    0    2
javax/ 0    0
javax/crypto/  0    0
javax/crypto/interfaces/    0    0
javax/crypto/interfaces/DHKey.class   209   185
javax/crypto/interfaces/DHPublicKey.class    265   215
javax/crypto/interfaces/DHPrivateKey.class   267   215
javax/crypto/interfaces/PBEKey.class  268   224
javax/crypto/SecretKey.class  167   155
...

注意輸入內(nèi)容頂部包含 META-INF 的那幾行,這是 menifest 和安全驗證信息。其中大小為 0 的項不是文件,而是目錄。

要真正從 JAR 文件中讀取文件內(nèi)容,你必須獲得相應(yīng)條目的 InputStream。這不同于 JarEntry。JarEntry 僅包括了入口信息,卻并未包含實際的內(nèi)容。這很像 File 和 FileInputSteram 的區(qū)別。只訪問 File,永遠(yuǎn)不會打開相應(yīng)的文件,它只讀取在目錄中的信息。下面告訴你如何從一個條目得到 InputStream:

復(fù)制代碼 代碼如下:
InputStream input = jarFile.getInputStream(entry);

得到輸入流之后,你只需要像讀其它流一樣讀它就行了。如果是一個文本流,要記得使用一個 Reader 來從流中獲取字符。而對于字節(jié)流,如圖片,則只好直接讀取。

下面的程序演示了從一個 JAR 文件中讀取內(nèi)容。運(yùn)行程序時,需要指定要從 JAR 文件中讀取的文件名,這個文件必須是文本文件類型。

import java.io.*;
import java.util.jar.*;
public class JarRead {
  public static void main (String args[]) 
    throws IOException {
    if (args.length != 2) {
      System.out.println("Please provide a JAR filename and file to read");
      System.exit(-1);
    }
    JarFile jarFile = new JarFile(args[0]);
    JarEntry entry = jarFile.getJarEntry(args[1]);
    InputStream input = jarFile.getInputStream(entry);
    process(input);
    jarFile.close();
  }
  private static void process(InputStream input) 
    throws IOException {
    InputStreamReader isr = 
      new InputStreamReader(input);
    BufferedReader reader = new BufferedReader(isr);
    String line;
    while ((line = reader.readLine()) != null) {
      System.out.println(line);
    }
    reader.close();
  }
}

假設(shè)你有一個名為 myfiles.jar 的 JAR 文件,其中有一個名為 spider.txt 文本文件,再假設(shè)那個  pider.txt 包含如下文本:

The itsy bitsy spider 
Ran up the water spout
Down came the rain and
Washed the spider out 

運(yùn)行下面的命令以顯示 JAR 文件中該文本文件的內(nèi)容:

復(fù)制代碼 代碼如下:
java JarRead myfiles.jar spider.txt

希望本文所述對大家的java程序設(shè)計有所幫助。

相關(guān)文章

  • JSON中fastjson、jackson、gson如何選擇

    JSON中fastjson、jackson、gson如何選擇

    在Java中,JSON的解析方式很多,例如fastjson(阿里)、Gson(谷歌)、jackjson等,本文主要介紹了JSON中fastjson、jackson、gson如何選擇,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • Mybatis-Spring連接mysql 8.0配置步驟出錯的解決方法

    Mybatis-Spring連接mysql 8.0配置步驟出錯的解決方法

    這篇文章主要為大家詳細(xì)介紹了Mybatis-Spring連接mysql 8.0配置步驟出錯的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Java double轉(zhuǎn)BigDecimal的注意事項說明

    Java double轉(zhuǎn)BigDecimal的注意事項說明

    這篇文章主要介紹了Java double轉(zhuǎn)BigDecimal的注意事項說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 服務(wù)性能優(yōu)化之mybatis-plus開啟與關(guān)閉SQL日志打印方法

    服務(wù)性能優(yōu)化之mybatis-plus開啟與關(guān)閉SQL日志打印方法

    這篇文章主要介紹了在Mybatis-plus中開啟和關(guān)閉控制臺SQL日志打印,在`application.properties`文件中,可以通過配置來實現(xiàn)SQL日志的開啟和關(guān)閉,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • Java Web開發(fā)入門書籍實例解析(總結(jié)一)

    Java Web開發(fā)入門書籍實例解析(總結(jié)一)

    從事Java Web開發(fā)這一段時間來,對Java 面向?qū)ο蟮乃枷牒蚆VC開發(fā)模式可以說已經(jīng)熟悉了。我當(dāng)前參與的項目使用的框架是Spring、SpringMVC、Hibernate。下面腳本之家小編給大家整理一篇教程幫助大家學(xué)習(xí)javaweb相關(guān)知識,感興趣的朋友可以參考下
    2016-03-03
  • 解決jpa查詢語句自動變成了update的問題

    解決jpa查詢語句自動變成了update的問題

    這篇文章主要介紹了解決jpa查詢語句自動變成了update的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java九種分布式ID解決方案

    java九種分布式ID解決方案

    在日常的業(yè)務(wù)開發(fā)中,通常需要對一些數(shù)據(jù)做唯一標(biāo)識,本文主要介紹了java九種分布式ID解決方案,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot項目從搭建到發(fā)布一條龍

    SpringBoot項目從搭建到發(fā)布一條龍

    這篇文章主要介紹了SpringBoot項目從搭建到發(fā)布一條龍,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java設(shè)計模式之工廠方法模式實例簡析

    Java設(shè)計模式之工廠方法模式實例簡析

    這篇文章主要介紹了Java設(shè)計模式之工廠方法模式,較為詳細(xì)的分析了Java工廠模式的功能、定義并給出了實例代碼加以總結(jié)分析,需要的朋友可以參考下
    2015-11-11
  • Java打印流原理及實例詳解

    Java打印流原理及實例詳解

    這篇文章主要介紹了Java打印流原理及實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

昭苏县| 镇安县| 红安县| 余庆县| 琼结县| 宜君县| 平乡县| 泾源县| 大同市| 济阳县| 桂阳县| 陆良县| 普定县| 小金县| 承德县| 涿鹿县| 兴义市| 西昌市| 崇明县| 西贡区| 三台县| 启东市| 崇信县| 安阳市| 桂平市| 霞浦县| 南昌县| 庆城县| 金山区| 喀喇| 黄梅县| 格尔木市| 临邑县| 永平县| 金溪县| 芜湖市| 县级市| 双鸭山市| 眉山市| 缙云县| 博湖县|