日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Core Java笔记 6.部署应用程序

發布時間:2024/8/24 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.0 Created-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() {@Overridepublic 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() {@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");// 設置默認設置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() {@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=PropertiesTest

put & store & load & get

  • setting.load(in);
  • setting.put(xx, xx);
  • setting.store(out, "Program Properties");
  • 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);

    轉載于:https://www.cnblogs.com/nil2inf/p/4474341.html

    總結

    以上是生活随笔為你收集整理的Core Java笔记 6.部署应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。