jar既可包含類文件,也能夠包含諸如圖像聲音等其餘類型文件,jar文件是採用ZIP格式壓縮的。
java
建立格式:web
jar cvf JARFileName File1 File2 ...
例如:服務器
jar cvf CalculatorClasses.jar *.class icon.gif
jar 命令格式:數據結構
jar options File1 File2 ...
選項:app
每一個JAR文件包含一個用於描敘歸檔特徵的清單文件(manifest)ide
清單文件名:MANIFEST.MF,位於JAR文件一個特殊META-INF子目錄中。ui
清單條目被分紅多個節。第一節爲主節(main section).做用於整個JAR文件。隨後的條目用來指定已命條目屬性,這些已命名條目能夠是某個文件,包或URL。必須起始於名爲Name的條目。節與節之間用空行分割。如:url
ManiFest-Version:1.0 描敘這個歸檔文件的行 Name:Wcozle.class 描述這個文件的行 Name:com/mycompany/mypkg/ 描述這個包的行
想要編輯清單文件,須要將但願添加到清單文件中的行放到文本文件中,運行:spa
jar cfm JARFileName ManifestFileName ...
例如:操作系統
jar ufm MyArchive.jar manifest.mf com/mycompany/mypkg/*.class
更多參看http://java.sun.com/javase/6/docs/technotes/guides/jar.
Java SE6中,可用jar命令的e 選項指定程序的條目點,即一般須要在調用Java程序加載器時指定的類:
jar cvfe MyProgram.jar com.mycompany.mypkg.MainAppClass files to add
用戶可簡單的啓動應用程序:
java -jar MyProgram.jar
在舊的JDK中,必須指定應用程序主類:
Main-Class: com.mycompany.mypkg.MainAppClass
不要將擴展名.class添加到主類名中。而後運行:
jar cvfm MyProgram.jar mainclass.mf files to add
注意:清單文件最後一行必須以換行符結束。
一些相關數據文件如:
圖像和聲音文件
帶有消息字符串和按鈕標籤的文本文件
二進制數據文件
類加載器知道如何搜索類文件,直到在類路徑、存檔文件、或Web服務器上找到爲止,利用資源機制,對非類文件也能夠一樣方便地操做。必要步驟以下:
得到具備資源的Class對象,例如AboutPane.class
若是是圖像或聲音,須要調用getresource(filename)得到URL資源位置,再利用getImage或getAudioClip讀取
其餘資源可用getResourceAsStream讀取文件中的數據
重點在於類加載器能夠記住如何定位類,而後在同一位置查找關聯資源
如圖片:
URL url = ResourceTest.class.getResource("about.gif"); Image image = Tookit.getDefualtTookit().getImage(url);
在找到ResourceTest類的地方,而後在同位置查找關聯資源。
如文件:
ImputStream stream = ResourceTest.class.getResourceAsStream("about.txt"); Scanner in = new Scanner(stream);
除了能夠將資源文件和類文件放在同一目錄外,還能夠將它放在子目錄中。可以使用層級資源名:data/text/about.txt.這是一個相對資源名,他會被解釋爲相對於加載這個資源的類所在的包。而以"/"開頭的,如:/corejava/titile.txt.定位於corejava目錄下(他多是類路徑的一個子目錄,也可能位於JAR文件中,對applet在web服務器上).
屬性映射:存儲鍵/值對的數據結構。用來存放配置信息。三個特性:
鍵和值都是字符串
鍵/值對能夠很容易地寫入文件或從文件讀出
用二級表存放默認值
實現屬性映射的類爲Properties。如:
Properties settings = new Properties(); settings.put("width","200"); settings.put("title","Hello world");
可用store將這個屬性映射列表保存到文件。在這裏將屬性映射保存在Myprog.properties文件中。
FileOutputStream out = new FileOutputStream("program.properties"); settings.store(out,"Program Properties"); //第二個參數爲這個文件的注
從文件加載這些屬性:
FileInputStream in = new FileInputStream("program.properties"); settings.load(in);
習慣將屬性存儲在用戶主目錄的某個子目錄下。查看用戶主目錄調用System.getProperties方法。 還可使用Properties對象描述系統信息。主目錄包含鍵user.home。一個頗有用的方法,讀取單鍵:
String userDir = System.getProperties("user.name");
一旦用戶手工的編輯文件,爲應用程序提供 默認值就是一種很好的想法。Properties類有兩種提供默認值的機制。第一種是在試圖得到字符串值是指定默認值。當鍵值不存在時,就會自動的使用它。
String title = settings.getProperties("title","Defualt title");
若是屬性映射中有title屬性,則title設置成字符串,不然,title將設置成Default title。
若是以爲每次調用getProperties指定默認值太麻煩,可將全部默認值放在一個二級屬性映射中,並在主屬性映射的構造器中提供映射。且用它來夠造查詢表。
Properties defaultSettings = new Properties(); defaultSettings.put("width","300"); defaultSettings.put("height","200"); defaultSettings.put("title","Default title"); ... Properties settings = new Properties(defaultSettings);
屬性文件的不足:
配置文件不能存放在用戶的主目錄中。(有些操做系統沒有主目錄的概念)
沒有標準的爲配置文件命名的規則。用戶安裝多個Java應用程序,會增長配置文件的衝突。