国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Core Java筆記 6.部署應用程序

2019-11-15 00:01:58
字體:
來源:轉載
供稿:網友
Core java筆記 6.部署應用程序本章重點:
  • JAR 文件
  • Java Resource
  • 應用程序的配置

JAR 文件
JAR 可以將 Java 應用程序打包,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 結構

Manifest-Version: 1.0描述這個歸檔文件的行Name: Woozle.class描述這個文件的行Name: com/mycompany/mypkg/描述這個包的行
可運行 JAR 文件
jar cvfe MyProgram.jar corejava.reflection.MethodPointerTest corejava

可以指定程序的入口. 在 manifest 會生成:

Manifest-Version: 1.0Created-By: 1.6.0_65 (Apple Inc.)Main-Class: corejava.inheitance.ArrayStoreExceptionTest

java -jar MyProgram.jar 即可運行.

Java Resource

應用程序的資源可以是:

  • 圖像和聲音文件.
  • 帶有消息字符串和按鈕標簽的文本文件.
  • 二進制數據文件.

Java 的資源不同 Windows, Windows 的資源屬于 exe 文件的一部分,通過標準的程序設計訪問;而 Java 資源作為單獨的文件存儲,不是類文件的一部分存儲,對資源的訪問和解釋由每個類自己勝任.

對資源的訪問和解釋由每個類自己勝任.e.g.

package corejava.resource;import javax.swing.*;import java.awt.*;import java.io.InputStream;import java.net.URL;import java.util.Scanner;/** * Created by guolong.fan on 15/4/27. */public class ResourceTest {    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            @Override            public void run() {                ResourceTestFrame frame = new ResourceTestFrame();                frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);                frame.setVisible(true);            }        });    }}class ResourceTestFrame extends JFrame {    public ResourceTestFrame() {        setTitle("ResourceTest");        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);        URL aboutURL = getClass().getResource("about.gif");        Image img = Toolkit.getDefaultToolkit().getImage(aboutURL);        setIconImage(img);        JTextArea textArea = new JTextArea();        InputStream stream = getClass().getResourceAsStream("about.txt");        Scanner in = new Scanner(stream);        while (in.hasNext()) {            textArea.append(in.nextLine() + "/n");        }        add(textArea);    }    public static final int DEFAULT_WIDTH = 300;    public static final int DEFAULT_HEIGHT = 300;}

應用程序的配置

對應用程序進行配置,并且將配置保存起來,當再次運行應用程序時讀取配置。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() {            @Override            public void run() {                PropertiesFrame frame = new PropertiesFrame();                frame.setVisible(true);            }        });    }}class PropertiesFrame extends JFrame {    public PropertiesFrame() {        // Properties        String userDir = System.getProperty("user.home");        File propertiesDir = new File(userDir, ".corejava");        if (!propertiesDir.exists()) propertiesDir.mkdir();        properitesFile = new File(propertiesDir, "program.properties");        // 設置默認設置        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);        // 關閉 window 時 將當前設置寫入配置文件中        addWindowListener(new WindowAdapter() {            @Override            public 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 2015height=336width=420left=360top=23title=PropertiesTest

put & store & load & get

  1. setting.load(in);
  2. setting.put(xx, xx);
  3. setting.store(out, "Program Properties");
  4. setting.getProperty("left");
Prefrences

Properties 類簡化讀取和保存配置. 但是配置文件存放無法放在主目錄中(有些操作系統沒有主目錄的概念); 沒有標準的配置文件命名的規則,導致配置文件名沖突.

Java SE 1.4 提供了 Preferences 類提供一個與平臺無關的中心知識庫.中心知識庫實現是透明,通常 Windows 采用注冊表,而 linux 采用放在本地文件系統中.

Preferences 的中心知識庫采用樹狀結構,每個節點的路徑類似于包名,這樣可以避免命名沖突。每個節點都有一個用來存放 key/value 的獨立表。

為了增加靈活性,系統中有多棵并行的樹。系統樹用來存放全體用戶的公共信息,每個程序的使用者擁有一棵樹。Preferences 類操作的是'當前用戶'的用戶樹。

訪問用戶樹: Preferences root = Preferences.userRoot();訪問系統樹: Preferences root = Preferences.systemRoot();訪問具體節點(通過路徑名): Preferences node = root.node("/com/mycompany/myapp");訪問具體節點(通過包名): Preferences node = Preferences.userNodeForPackage(obj.getClass()); or Preferences node = Preferences.systemNodeForPackage(obj.getClass());

通過節點來 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);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹凤县| 喀什市| 东乌| 本溪市| 汶上县| 贵定县| 彭泽县| 东海县| 绩溪县| 外汇| 托克逊县| 淮安市| 吉木萨尔县| 东山县| 武威市| 肃南| 孝感市| 邵东县| 西吉县| 黄山市| 安多县| 通海县| 忻城县| 祁阳县| 重庆市| 柳江县| 青阳县| 堆龙德庆县| 越西县| 江孜县| 三都| 石家庄市| 介休市| 河北省| 平阴县| 右玉县| 香港| 革吉县| 青州市| 横峰县| 云浮市|