如何从JAR和ZIP档案文件中提取Java资源

多数 java 程序员都非常清楚使用 jar 文件将组成 java 解决方案的各种资源(即 .class 文件、声音和图像)打包的优点。刚开始使用 jar 文件的人常问的一个问题是:“如何从 jar 文件中提取图像呢?”本文将回答这个问题,并会提供一个类,这个类使从 jar 文件中提取任何资源变得非常简单!

加载 gif 图像

假定我们有一个 jar 文件,其中包含我们的应用程序要使用的一组 .gif 图像。下面就是使用 JarResources 访问 jar 文件中的图像文件的方法:

JarResources JR=new JarResources("GifBundle.jar");

Image logo=Toolkit.getDefaultToolkit().createImage(JR.getResources("logo.gif"));

这段代码说明我们可以创建一个JarResources对象,并将其初始化为包含我们要使用的资源的 jar 文件 -- images.jar。随后我们使用JarResources的getResource()方法将来自 logo.gif 文件的原始数据提供给 awt Toolkit 的createImage()方法。

命名说明

JarResource 是一个非常简单的示例,它说明了如何使用 java 所提供的各种功能来处理 jar 和 zip 档案文件。

工作方式

JarReources类的重要数据域用来跟踪和存储指定 jar 文件的内容:

public final class JarResources {
  public boolean debugon=false;
  private Hashtable htsizes=new Hashtable();
  private Hashtable htjarcontents=new Hashtable();
  private String jarfilename;

这样,该类的实例化设置 jar 文件的名称,然后转到init()方法完成全部实际工作。

public JarResources(String jarfilename) {
    this.jarfilename=jarfilename;
    init();
  }

现在,init()方法只将指定 jar 文件的整个内容加载到一个 hashtable(通过资源名访问)中。

这是一个相当有用的方法,下面我们对它作进一步的分析。ZipFile类为我们提供了对 jar/zip 档案头信息的基本访问方法。这类似于文件系统中的目录信息。下面我们列出ZipFile中的所有条目,并用档案中每个资源的大小添充 htsizes hashtable:

private void init() {
    try {
      // extracts just sizes only.
      ZipFile zf=new ZipFile(jarFileName);
      Enumeration e=zf.entries();
      while (e.hasMoreElements()) {
        ZipEntry ze=(ZipEntry)e.nextElement();
        if (debugOn) {
         System.out.println(dumpZipEntry(ze));
        }
        htSizes.put(ze.getName(),new Integer((int)ze.getSize()));
      }
      zf.close();

时间: 2024-10-03 09:06:49

如何从JAR和ZIP档案文件中提取Java资源的相关文章

如何用PHP脚本和PEAR类创建ZIP档案文件

在开发Web应用程序时,很有可能您会遇到不同格式的文件--CSV数据.密码文件.XML编码的内容和不同形式的二进制的数据.您的PHP脚本将需要频繁地和这些文件交互,从中读取数据和将数据写入其中.由于有这么些格式的文件要处理,所以您就不要意外PHP中有那么多种类型的内置函数和外部的库,用来连接和使用几乎所有您能说出名称的文件格式. 这篇指南就是关于这样一种文件格式的,可能应用程序开发者几乎每天都会遇到这种文件:ZIP格式.一般这种格式是用来通过电子邮件和远程连接传输文件的,能够将多个文件压缩到一个

在Linux 统下从ISO镜像中提取和复制文件的3种方法

假设你的 Linux 服务器上有一个超大的 ISO 镜像文件,你想要打开它,然后提取或者复制其中的一个文件.你会怎么做呢? 其实在 Linux 系统里,有很多方法来实现这个要求. 比如说,你可以使用传统的 mount 命令以只读方式把 ISO 镜像文件加载为 loop 设备,然后再把文件复制到另一个目录. 在 Linux 系统下提取 ISO 镜像文件 为了完成该测试,你得有一个 ISO 镜像文件(我使用 ubuntu-16.10-server-amd64.iso 系统镜像文件)以及用于挂载和提取

objective c-不使用分析程序在XMLNSString中提取值

问题描述 不使用分析程序在XMLNSString中提取值 string如下: <?xml version="1.0" encoding="utf-8"?> <NewDataSet> <Table> <CITY>Jupiter</CITY> <STATE>FL</STATE> <ZIP>33477</ZIP> <AREA_CODE>561</A

在 Linux 系统下从 ISO 镜像中提取和复制文件的 3 种方法

假设你的 Linux 服务器上有一个超大的 ISO 镜像文件,你想要打开它,然后提取或者复制其中的一个文件.你会怎么做呢? 其实在 Linux 系统里,有很多方法来实现这个要求. 比如说,你可以使用传统的 mount 命令以只读方式把 ISO 镜像文件加载为 loop 设备,然后再把文件复制到另一个目录. 在 Linux 系统下提取 ISO 镜像文件 为了完成该测试,你得有一个 ISO 镜像文件(我使用 ubuntu-16.10-server-amd64.iso 系统镜像文件)以及用于挂载和提取

从录音中提取语音特征,再去做个性化语音合成

问题描述 从录音中提取语音特征,再去做个性化语音合成 诸位 语音分析处理等相关领域的高人, 小民实在有事相求, 现在只能广发此求助信,希望能得到些许帮助.!2016年1月3日我们用笔记本拍的唯一一次全家福 现在我手上只有若干个语音文件(wav), 我老婆生前留下来的, 简单的来说, 就是想要三岁的孩子,以后还能听到妈妈的声音, 孩子叫妈妈, 妈妈会答应一声, 再奢望一点,就是孩子能和妈妈 能简单的对话, 让孩子感觉到 妈妈还在他身边. 我有很多种空想和假设,但是实现起来,却是如此的困难, 翻遍互

如何从PostgreSQL json中提取数组

如何从PostgreSQL json中提取数组 作者 digoal 日期 2016-09-10 标签 PostgreSQL , json , 数组 , jsonb 背景 在PostgreSQL中使用JSON类型时,除了能存,大家更关心的是JSON中的数据的使用,例如 1. VALUE支持哪些类型, 通过以下方法可以提取JSON最外层的VALUE的数据类型 json_typeof(json) jsonb_typeof(jsonb) 目前支持的类型如下 object, array, string,

怎样从ppt中提取图片?PowerPoint图片提取技巧

  看到人家的PPT各种精美,无论是背景装饰素材还是图片都很好看想要占为己有该如何操作?怎样从ppt中提取图片?接下来小编就为大家带来PowerPoint图片提取技巧. 怎样从ppt中提取图片?PowerPoint图片提取技巧 在这里小编要为大家介绍一个让你详见恨晚的PowerPoint教程,这个技巧学会了比单独截图保存图片省事得多: 把ppt文件的后缀格式改为".rar",然后使用解压软件将其解压开来,在文件夹中就可以很轻松的看到所有原PPT中的图片了,方便得很!

如何从Html页面中提取所有汉字

汉字|页面 <SCRIPT LANGUAGE="vbScript">dim strstr="怎样从一个Html页面中提取所有汉字呢?不能有其它Html代码."alert FilterChinese(str) function FilterChinese(strInput)dim result:result=""dim tempStrfor i=1 to len(strInput)tempStr=mid(strInput,i,1)if

php录入页面中动态从数据库中提取数据的实现

动态|数据|数据库|页面 摘要:用php制作动态web页面时,在提交服务器之前,让php根据用户在当前页面上录入的某字段的值立即从数据库中取出相关的其它字段的值并显示到当前页面上,是php程序开发中的难点.本文以一个具体实例详细介绍了怎样将两个html内嵌式语言php和javascript巧妙结合起来,解决这个难点的具体方法. 关键词:php.动态.html. 现在的网站已经从以前提供静态信息的形式发展到交互式的提供动态信息业务的方式.web的信息服务形式可以概括为两点:向客户提供信息:记录客户