一.Jar文件
1.清单文件
(1)Jar文件是为了提供一个单独的类文件。
(2)Jar文件可以包含类文件,图像声音等其他类型的文件。
(3)Jar文件的制作:可以使用Jar工具,在默认的JDK目录下,在jdk/bin目录下。
(4)创建Jar文件的命令为:jar cvf JARFileName File1 File2…(例如:jar cvf CalculatorClasses.jar*.class icon.gif)。通常,Jar命令格式为:jar options File1 File2…
(5)清单文件
1)除了类文件,图像等其他资源,每个Jar文件还包含一个用于描述归档特征的清单文件。该清单文件被命名为MANIFEST.MF,它位于Jar文件的一个特殊META-INF子目录中,最小的符合标准的清单文件是很简单的:Manifest-Version:1.0。
2)复杂清单文件可能包含更多条目,这些清单条目被分为多个节,第一节被称为主节,作用域整个jar文件。随后的条目用来制定已命名条目的属性。这些已命名的条目可以是某个文件,包或者是URL。它们都必须起始于名为Name的起始条目。节与节之间用空格分开。
3)要编辑清单文件,要将希望添加到文件中的行放到文本文件中,然后运行:jar cfm JARFileName ManifestFileName …
4)要更新一个已有Jar文件的清单文件,要将增加的部分放置到一个文本文件中,再执行:jar ufm MyArchive.jar manifest-addition.mf
(6)清单文件的最后面一行必须以换行符结束,否则清单文件不能正确的被读取。
2.可运行Jar文件
(1)可以使用Jar命令中的e选项指定程序的条目点,也就是通常需要在调用Java程序加载器时指定的类:jar cvfe MyProgram.jar com.mycompany.mypkg.MainAppClass files to add。
(2)用户启动应用程序:java -jar MyProgram.jar。
(3)在旧JDK版本中,必须指定应用程序的主类,下面是这个处理命令:Main-Class:com.company.mypkg.MainAppClass。
(4)不要将扩展名.class添加到主类中。然后运行jar命令:jar cvfm MyProgram.jar mainclass.mf files to add。
(5)Jar文件在各操作系统下的操作方式:
1)在Windows操作系统中,java运行时安装器将建立一个扩展名为.jar的文件与javaw-jar命令相关联来启动文件(与java命令不同,javaw命令不打开shell窗口)。
2)在Solaris操作系统中,操作系统能够识别Jar文件的“魔数”格式,并用javaw-jar命令来启动它。
3)在Mas OS X 操作系统中,操作系统能够识别.jar扩展名文件。当双击jar文件时就会执行java程序。
3.资源
(1)定义:在app和应用程序中使用的类通常需要使用一些相关的数据文件。如:
1)图像和声音文件。
2)带有消息字符串和按钮标签的文本文件。
3)二进制数据丢失。例如:描述地图布局的文件。
在Java中,这些关联的文件被称为资源。
(2)类加载器搜索类文件步骤:
1)获得具有资源的class对象。
2)如果资源是一个图像或声音文件,就需要调用getresource(filename)获得作为URL的资源位置,然后利用getImage或getAudioClip方法进行读取。
3)与图像或声音文件不同,其他资源可以使用getResourceAsStream方法读取文件中的数据。
(3)类加载器可以记住任何定位类,然后在同一位置查找关联的资源。
(4)除了可以将资源文件与类文件放在同一个目录中外,还可以将它放在子目录中,可以使用下面的层级资源名:data/text/about.txt,这是一个相对的资源名,它会被解释为相对于加载这个资源所在的类所在的包。注意:必须使用”/“作为分隔符,而不要理存储资源文件的系统实际使用哪种目录分隔符。例如:在Windows文件系统中,资源加载器会自动的将”/“转换为”\“。
(5)一个以”/“开头的资源名被称为绝对资源名。它的定位方式与类在包中的定位方式一样。
(6)文件的自动装载是利用资源加载特性来完成的。
(7)另一个经常使用资源的地方是在程序的国际化。
4.密封
(1)密封的使用:可以将Java包密封以保证不会有其他的类加入到其中。如果在代码中使用了包可见的类,方法和域,就可能希望密封包。如果不密封,其他类就有可能放在这个包中,进而访问包可见的特性。
(2)要想密封一个包,需要将包中的所有类文件放到一个JAR文件中。在默认情况下,JAR文件中的包是没有密封的。可以在清单文件的主节中加入下面一行:Sealed:true来改变全局的默认设定。
(3)对于每个单独的包,可以通过在Jar文件的清单中增加一节来指定是否想要密封这个包。
(4)要想密封一个包,要创建一个包含清单指令的文本文件,然后用常规的方式运行jar命令:jar cvfm MyArchive.jar manifest.mf files to add。