Core Java笔记 6.部署应用程序
本章重點:
- JAR 文件
- Java Resource
- 應(yīng)用程序的配置
JAR 文件
JAR 可以將 Java 應(yīng)用程序打包,JAR 文件可以包含類文件,也可以包含資源文件. JAR 文件采用 ZIP 壓縮格式.JAR 命令:
? Desktop jar cvf sample.jar corejava | iconv -f gbk -t utf-8標明清單(manifest) 增加:corejava/(讀入= 0) (寫出= 0)(存儲了 0%) 增加:corejava/.DS_Store(讀入= 6148) (寫出= 425)(壓縮了 93%) 增加:corejava/inheritance/(讀入= 0) (寫出= 0)(存儲了 0%) 增加:corejava/inheritance/ArrayStoreExceptionTest.class(讀入= 787) (寫出= 455)(壓縮了 42%) 增加:corejava/inheritance/Base.class(讀入= 651) (寫出= 391)(壓縮了 39%) 增加:corejava/inheritance/DynamicBinding.class(讀入= 654) (寫出= 386)(壓縮了 40%) 增加:corejava/inheritance/Sub.class(讀入= 546) (寫出= 354)(壓縮了 35%) 增加:corejava/inner/(讀入= 0) (寫出= 0)(存儲了 0%) 增加:corejava/inner/InnerClassTest.class(讀入= 744) (寫出= 469)(壓縮了 36%) 增加:corejava/inner/TalkingClock$TimePrinter.class(讀入= 1315) (寫出= 689)(壓縮了 47%) 增加:corejava/inner/TalkingClock.class(讀入= 933) (寫出= 527)(壓縮了 43%) 增加:corejava/interfaces/(讀入= 0) (寫出= 0)(存儲了 0%) 增加:corejava/interfaces/CloneTest.class(讀入= 1372) (寫出= 757)(壓縮了 44%) 增加:corejava/interfaces/Employee.class(讀入= 1867) (寫出= 994)(壓縮了 46%) 增加:corejava/interfaces/Employee2.class(讀入= 308) (寫出= 227)(壓縮了 26%) 增加:corejava/interfaces/ProxyTest.class(讀入= 1427) (寫出= 819)(壓縮了 42%) 增加:corejava/interfaces/SortTest.class(讀入= 599) (寫出= 354)(壓縮了 40%) 增加:corejava/interfaces/TimePrinter.class(讀入= 1061) (寫出= 580)(壓縮了 45%) 增加:corejava/interfaces/TimerTest.class(讀入= 854) (寫出= 512)(壓縮了 40%) 增加:corejava/interfaces/TraceHandler.class(讀入= 1379) (寫出= 762)(壓縮了 44%) 增加:corejava/reflection/(讀入= 0) (寫出= 0)(存儲了 0%) 增加:corejava/reflection/ArrayGrowTest.class(讀入= 1897) (寫出= 1054)(壓縮了 44%) 增加:corejava/reflection/MethodPointerTest.class(讀入= 1869) (寫出= 992)(壓縮了 46%) 增加:corejava/reflection/ObjectAnalyzer.class(讀入= 3411) (寫出= 1807)(壓縮了 47%) 增加:corejava/reflection/ReflectionTest.class(讀入= 4412) (寫出= 2198)(壓縮了 50%)manifest
在生成 JAR 文件時,每個 JAR 文件還包含一個用于描述歸檔特征的清單文件(manifest),名為 MANIFEST.MF,位于 META-INF 子目錄中(META-INF/MANIFEST.MF)。
manifest 結(jié)構(gòu)
Manifest-Version: 1.0 描述這個歸檔文件的行Name: Woozle.class 描述這個文件的行Name: com/mycompany/mypkg/ 描述這個包的行可運行 JAR 文件
jar cvfe MyProgram.jar corejava.reflection.MethodPointerTest corejava可以指定程序的入口. 在 manifest 會生成:
Manifest-Version: 1.0 Created-By: 1.6.0_65 (Apple Inc.) Main-Class: corejava.inheitance.ArrayStoreExceptionTestjava -jar MyProgram.jar 即可運行.
Java Resource
應(yīng)用程序的資源可以是:
- 圖像和聲音文件.
- 帶有消息字符串和按鈕標簽的文本文件.
- 二進制數(shù)據(jù)文件.
Java 的資源不同 Windows, Windows 的資源屬于 exe 文件的一部分,通過標準的程序設(shè)計訪問;而 Java 資源作為單獨的文件存儲,不是類文件的一部分存儲,對資源的訪問和解釋由每個類自己勝任.
對資源的訪問和解釋由每個類自己勝任.
e.g.
應(yīng)用程序的配置
對應(yīng)用程序進行配置,并且將配置保存起來,當再次運行應(yīng)用程序時讀取配置。Java 提供了兩種方式:Properties 和 Preference。
put & store & load & get
Properties
Property Map: 鍵/值對,通常用于存放配置信息.
package corejava.resource;import javax.swing.*; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties;/*** Created by guolong.fan on 15/4/27.*/ public class PropertiesTest {public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {@Overridepublic void run() {PropertiesFrame frame = new PropertiesFrame();frame.setVisible(true);}});} }class PropertiesFrame extends JFrame {public PropertiesFrame() {// PropertiesString userDir = System.getProperty("user.home");File propertiesDir = new File(userDir, ".corejava");if (!propertiesDir.exists()) propertiesDir.mkdir();properitesFile = new File(propertiesDir, "program.properties");// 設(shè)置默認設(shè)置Properties defaultSettings = new Properties();defaultSettings.put("left", "0");defaultSettings.put("top", "0");defaultSettings.put("width", "" + DEFAULT_WIDTH);defaultSettings.put("height", "" + DEFAULT_HEIGHT);defaultSettings.put("title", "");setting = new Properties(defaultSettings);if (properitesFile.exists()) try {// 如果文件存在,則從文件導入FileInputStream in = new FileInputStream(properitesFile);setting.load(in);} catch (IOException ex) {ex.printStackTrace();}int left = Integer.parseInt(setting.getProperty("left"));int top = Integer.parseInt(setting.getProperty("top"));int width = Integer.parseInt(setting.getProperty("width"));int height = Integer.parseInt(setting.getProperty("height"));setBounds(left, top, width, height);String title = setting.getProperty("title");if (title.equals("")) title = JOptionPane.showInputDialog("Please supply a frame title");if (title == null) title = "";setTitle(title);// 關(guān)閉 window 時 將當前設(shè)置寫入配置文件中addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent windowEvent) {setting.put("left", "" + getX());setting.put("top", "" + getY());setting.put("width", "" + getWidth());setting.put("height", "" + getHeight());setting.put("title", getTitle());try {FileOutputStream out = new FileOutputStream(properitesFile);setting.store(out, "Program Properties");} catch (IOException e) {e.printStackTrace();}super.windowClosing(windowEvent);}});}private File properitesFile;private Properties setting;public static final int DEFAULT_WIDTH = 300;public static final int DEFAULT_HEIGHT = 300; }生成的配置文件:
#Program Properties #Sun May 03 17:11:24 CST 2015 height=336 width=420 left=360 top=23 title=PropertiesTestput & store & load & get
Prefrences
Properties 類簡化讀取和保存配置. 但是配置文件存放無法放在主目錄中(有些操作系統(tǒng)沒有主目錄的概念); 沒有標準的配置文件命名的規(guī)則,導致配置文件名沖突.
Java SE 1.4 提供了 Preferences 類提供一個與平臺無關(guān)的中心知識庫.中心知識庫實現(xiàn)是透明,通常 Windows 采用注冊表,而 Linux 采用放在本地文件系統(tǒng)中.
Preferences 的中心知識庫采用樹狀結(jié)構(gòu),每個節(jié)點的路徑類似于包名,這樣可以避免命名沖突。每個節(jié)點都有一個用來存放 key/value 的獨立表。
為了增加靈活性,系統(tǒng)中有多棵并行的樹。系統(tǒng)樹用來存放全體用戶的公共信息,每個程序的使用者擁有一棵樹。Preferences 類操作的是'當前用戶'的用戶樹。
訪問用戶樹: Preferences root = Preferences.userRoot();
訪問系統(tǒng)樹: Preferences root = Preferences.systemRoot();
訪問具體節(jié)點(通過路徑名): Preferences node = root.node("/com/mycompany/myapp");
訪問具體節(jié)點(通過包名): Preferences node = Preferences.userNodeForPackage(obj.getClass()); or Preferences node = Preferences.systemNodeForPackage(obj.getClass());
通過節(jié)點來 get/put.
String get(String key, String defVal); int getInt(String key, int defVal); ... ... put(String key, String value); putInt(String key, int value); ... ...采用 XML 格式導入/導出.
void exportSubtree(OutputStream out); void exportNode(OutputStream out);void importPreferences(InputStream in);轉(zhuǎn)載于:https://www.cnblogs.com/nil2inf/p/4474341.html
總結(jié)
以上是生活随笔為你收集整理的Core Java笔记 6.部署应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 白猫操作小实例
- 下一篇: eclipse @ 注释为何一写就报错