jar压缩原理?
在网络上,有些java程序的提供者将他们的java安装程序打包成一个jar文件的形式。当运行时,自动将jar中的程序解压出来安装到使用者的电脑上。他们是如何做到这些的呢?现在我们就来解开这个迷,让大家了解如果制作这样的jar文件。
首先,我们来回忆一下,以前我们打包jar时,通常将class程序要用到的资源如*.gif图片、*.xml配置文件等都打包在同一个jar中。而程序读取它们时,无外乎以下几种情况:
getClass().getResource(String name)
getClass().getresourceAsStream(String name)
由于Class的这两个方法实际上就是调用了ClassLoader的相应方法,所以可以干脆用下面的方法:
ClassLoader.getSystemClassLoader().getResource(String name)
ClassLoader.getSystemClassLoader().getResourceAsStream(String name)
getResource可以取得相关资源的URL, 这在使用图片资源时很有用。而getResourceAsStream可以取得资源的输入流,这个通常在读取jar中的xml配置文件时用到。
其实讲到这里我们就可以明白那些可以自动解压安装的jar是怎么一回事了----它就是使用了getresourceAsStream方法。
下面我们来详细描述怎么实现一个通用的自动解压安装的jar程序。
为了使这个程序尽可能的通用,我将它设计成下面的结构:
Resource包含要安装的资源的信息,通过getName方法可以取得资源名称,通过getDistPath方法要被安装的路径。相应的resourceCollectioin是Resource的集合。
InstallConfig是要安装资源的配置信息,为了通用的目的,将资源配置信息写入一名为install-config.xml的文件。InstallConfig初始化时,会载入配置文件中的信息。将其实例化成Resource集合:
jar压缩是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。
jar压缩是一种归档文件,以ZIP格式构建,以.jar为文件扩展名。
用户可以使用JDK自带的jar命令创建或提取JAR文件。也可以使用其他zip压缩工具,不过压缩时zip文件头里的条目顺序很重要,因为Manifest文件常需放在首位。
jar压缩内的文件名是Unicode文本。
一个可执行的jar 文件是一个自包含的 Java 应用程序,它存储在特别配置的JAR 文件中,可以由 JVM 直接执行它而无需事先提取文件或者设置类路径。
要运行存储在非可执行的 JAR 中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。
但是使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。
可执行 JAR 有助于方便发布和执行 Java 应用程序。