Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1561656
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:19:14

一起学习
1、JAR格式文件介绍 在JDK1.1版中,定义了用于将与Java应用程序相关的多个文件以及相关资源整合在一起的数据文件类型-JAR。也许读者会注意到:Sun以及其它公司发布的多种类型Java库都是以JAR形式进行文件压缩和封装的。 从本质上讲,JAR压缩文件采用ZIP格式进行数据压缩。由于最初引入JAR数据压缩类型的目的在于将开发完成的软件进行进行发布,因此,在JDK中定义了JAR类型文件管理工具,用于创建、浏览、解压缩以及执行JAR文件等操作。另外,在JDK API中还定义了封装在java.util.jar包中的多个对象,用于在Java应用程序中对JAR文件进行管理。 2、 利用JDK工具操作JAR文件 在JDK安装目录的bin子目录中,包括名称为“jar.exe”的可执行程序。该程序在执行过程中可以利用如下表所示的各个选项,实现JAR文件的多种类型操作: 表1 JDK压缩文件管理工具应用选项表 那么,对于包含了class字节码文件和包含相应资源文件的一个目录,利用JDK文档管理工具,如何创建JAR文件从而实现数据压缩的呢?让我们看下面的例子: 例如,对于一个要发布的软件项目Demo,在该目录中包括一个名称为Demo.class的Java字节码文件和包含声音文件的目录Audio、包含图片文件的目录Images,如下图所示: 那么,利用下面的命令即可实现将Demo项目创建成可发布的JAR类型压缩文档: C:>jar cvf Demo.jar Demo.class Audio Images 利用上述命令创建的JAR类型压缩文件不仅将Demo目录中的多种资源进行打包,而且将这些数据文件进行了压缩。如果读者不需要在打包过程中进行数据压缩,可以设置jar执行选项为“cvf0”。 如果利用jar工具的tf选项查看新创建的JAR文件,读者会发现在该文件中新增了名称为META-INF的目录,在该目录中包含MANIFEST.MF文件,该文件的作用是什么呢?总的说来:由于在创建JAR文件过程中可以进行数字签名、版本控制、包封装以及多种类型的功能扩展,因此,MANIFEST.MF文件即用于说明当前的JAR文件在创建过程中采用了何种类型的功能扩展,典型的MANIFEST.MF文件代码如下: Manifest-Version: 1.0 Name: java/math/BigDecimal.class SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64= MD5-Digest: z6z8xPj2AW/Q9AkRSPF0cg= 该文件的代码说明了压缩文件采用的数字签名内容。 3、 JAR包对象定义结构 除了可以利用JAR文档管理工具对jar文件进行管理之外,在JDK API中,还定义了java.util.jar包,其中封装了用于在Java应用程序中创建、维护和操作jar文件的多种类型对象,主要对象包括: Attributes:用于将JAR文件中说明属性内容映射到该类的各个字符串变量中; JarEntry:用于对应JAR文件中封装的各个被压缩文件; JarFile:对应磁盘文件系统中的JAR压缩文档对象; JarInputStream:从JAR文件中读取压缩内容的流对象; JarOutputStream:创建JAR文件的流对象; Manifest:对应JAR文件中说明内容的对象。 在实际的应用程序设计过程中,与创建和管理JAR压缩文档相关的对象为JarInputStream和JarOutputStream。在下面的内容中,将演示在Java应用程序中创建JAR类型压缩文档的方法。 4、创建JAR文档应用程序设计方法 下面的代码为创建JAR类型压缩文档的Java应用程序代码: //JARDemo.java import java.io.*; import java.util.jar.*; public class JARDemo { public static void main(String[] args) { if (args.length !=2 ) { System.out.println("请输入被压缩文件的名称和压缩文件的名称!"); System.exit(1); } try { //创建文件输入流对象 FileInputStream in = new FileInputStream( args[0] ); //创建文件输出流对象 FileOutputStream out = new FileOutputStream( args[1] ); //创建JAR数据输出流对象 JarOutputStream jarOut = new JarOutputStream( out ); //创建指向压缩原始文件的入口 JarEntry entry = new JarEntry( args[0] ); jarOut.putNextEntry( entry ); //向压缩文件中输出数据 int nNumber; byte[] buffer = new byte[512]; while ((nNumber=in.read(buffer)) != -1) jarOut.write(buffer,0,nNumber); //关闭创建的流对象 jarOut.close(); out.close(); in.close(); } catch(IOException e) { System.out.println( e ); } } 在该程序的实现代码中,首先创建用于进行文件输入和输出的FileInputStream和FileOutputStream对象,并以FileOutputStream对象实例为参数创建JarOutputStream对象实例,从而为创建JAR格式压缩文件建立数据流基础。 在随后的代码中,以被压缩文件的文件名为参数,创建在JAR压缩文件中指向压缩原始文件的Entry对象实例,并利用putNextEntry方法将该Entry存储进入压缩文件中。最后,利用JAROutputStream对象中定义的write方法向输出流中写出从压缩原始文件中读取的数据,从而创建JAR格式的压缩文件。 利用Java语言创建JAR格式压缩文件的方法很简单,那么,如何利用JDK API中定义的对象将被压缩的文件解压缩呢?请读者看下一节的内容。 5、 JAR文档解压缩方法 下面的程序代码用于将JAR类型文档解压缩后,恢复成为独立的数据文件: //UnjarDemo.java import java.io.*; import java.util.jar.*; public class UnjarDemo { public static void main(String[] args) { if ( args.length !=2 ) { System.out.println("Usage:java UnjarDemo "); System.exit(1); } try { //创建文件输入流对象实例 FileInputStream in = new FileInputStream( args[0] ); //创建Zip压缩格式输入流对象实例 JarInputStream jarin = new JarInputStream( in ); //创建文件输出流对象实例 FileOutputStream out = new FileOutputStream( args[1] ); byte[] buffer = new byte[1024]; int nNumber; while ((nNumber = jarin.read(buffer, 0, buffer.length)) != -1) out.write(buffer, 0, nNumber); //关闭文件流对象 jarin.close(); out.close(); in.close(); } catch(IOException e) { System.out.println(e); } } } 该程序的代码结构不是很复杂,请读者自行分析该文件中的对象应用形式以及JAR压缩文件解压缩方法。 6、 小结 在本部分的内容中,首先介绍了JAR类型文档的结构和JDK中jar文档管理工具的应用方法。在随后的内容中,以java.util.jar包中的应用对象为基础,讲解了Java语言创建和维护jar压缩文档程序设计方法。 下载本文示例代码


Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式Java数据压缩格式程序设计方法之JAR压缩格式
阅读(161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~