成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java? 教程(配置實(shí)用工具)

yhaolpz / 3567人閱讀

配置實(shí)用工具

本節(jié)介紹一些幫助應(yīng)用程序訪問(wèn)其啟動(dòng)上下文的配置實(shí)用程序。

屬性

Properties是作為鍵/值對(duì)管理的配置值,在每對(duì)中,鍵和值都是字符串值,鍵標(biāo)識(shí)并用于檢索值,就像變量名用于檢索變量的值一樣。例如,能夠下載文件的應(yīng)用程序可能使用名為“download.lastDirectory”的屬性來(lái)跟蹤上次下載所使用的目錄。

要管理屬性,請(qǐng)創(chuàng)建java.util.Properties的實(shí)例,此類提供以下方法:

將鍵/值對(duì)從流中加載到Properties對(duì)象中

從其鍵中檢索值

列出鍵及其值

枚舉鍵

將屬性保存到流

有關(guān)流的介紹,請(qǐng)參閱基礎(chǔ)I/O課程中的I/O流部分。

Properties擴(kuò)展了java.util.Hashtable,從Hashtable繼承的一些方法支持以下操作:

測(cè)試以查看特定鍵或值是否在Properties對(duì)象中

獲取當(dāng)前鍵/值對(duì)的數(shù)量

移除鍵及其值

將鍵/值對(duì)添加到Properties列表中

枚舉值或鍵

通過(guò)其鍵檢索值

確定Properties對(duì)象是否為空

安全考慮因素:對(duì)屬性的訪問(wèn)必須經(jīng)過(guò)當(dāng)前安全管理器的批準(zhǔn),假定本節(jié)中的示例代碼段位于獨(dú)立應(yīng)用程序中,默認(rèn)情況下,它們沒(méi)有安全管理器,applet中的相同代碼可能無(wú)法運(yùn)行,具體取決于運(yùn)行它的瀏覽器,有關(guān)applet安全性限制的信息,請(qǐng)參閱Java Applets課程中Applets可以做什么和不能做什么。

System類維護(hù)一個(gè)Properties對(duì)象,該對(duì)象定義當(dāng)前工作環(huán)境的配置,有關(guān)這些屬性的更多信息,請(qǐng)參閱系統(tǒng)屬性,本節(jié)的其余部分介紹了如何使用屬性來(lái)管理應(yīng)用程序配置。

應(yīng)用程序生命周期中的屬性

下圖說(shuō)明了典型應(yīng)用程序如何在執(zhí)行過(guò)程中使用Properties對(duì)象管理其配置數(shù)據(jù)。

Starting Up
前三個(gè)框中給出的操作在應(yīng)用程序啟動(dòng)時(shí)發(fā)生。首先,應(yīng)用程序?qū)⒛J(rèn)屬性從一個(gè)眾所周知的位置加載到Properties對(duì)象中,通常,默認(rèn)屬性與應(yīng)用程序的.class和其他資源文件一起存儲(chǔ)在磁盤上的文件中。
接下來(lái),應(yīng)用程序創(chuàng)建另一個(gè)Properties對(duì)象,并加載上次運(yùn)行應(yīng)用程序時(shí)保存的屬性,許多應(yīng)用程序基于每個(gè)用戶存儲(chǔ)屬性,因此在此步驟中加載的屬性通常位于此應(yīng)用程序在用戶主目錄中維護(hù)的特定目錄中的特定文件中,最后,應(yīng)用程序使用默認(rèn)和記住的屬性來(lái)初始化自身。
這里的關(guān)鍵是一致性,應(yīng)用程序必須始終將屬性加載并保存到同一位置,以便下次執(zhí)行時(shí)可以找到它們。

Running
在執(zhí)行應(yīng)用程序期間,用戶可能會(huì)在“首選項(xiàng)”窗口中更改某些設(shè)置,并更新Properties對(duì)象以反映這些更改,如果要在將來(lái)的會(huì)話中記住用戶更改,則必須保存它們。

Exiting
退出時(shí),應(yīng)用程序?qū)傩员4娴狡湟阎恢?,以便在下次啟?dòng)應(yīng)用程序時(shí)再次加載。

設(shè)置屬性對(duì)象

以下Java代碼執(zhí)行上一節(jié)中描述的前兩個(gè)步驟:加載默認(rèn)屬性并加載記住的屬性:

. . .
// create and load default properties
Properties defaultProps = new Properties();
FileInputStream in = new FileInputStream("defaultProperties");
defaultProps.load(in);
in.close();

// create application properties with default
Properties applicationProps = new Properties(defaultProps);

// now load properties 
// from last invocation
in = new FileInputStream("appProperties");
applicationProps.load(in);
in.close();
. . .

首先,應(yīng)用程序設(shè)置默認(rèn)的Properties對(duì)象,如果未在其他位置顯式設(shè)置值,則此對(duì)象包含要使用的屬性集,然后,load方法從名為defaultProperties的磁盤上的文件中讀取默認(rèn)值。

接下來(lái),應(yīng)用程序使用不同的構(gòu)造函數(shù)來(lái)創(chuàng)建第二個(gè)Properties對(duì)象applicationProps,其默認(rèn)值包含在defaultProps中,在檢索屬性時(shí),默認(rèn)值開(kāi)始起作用,如果在applicationProps中找不到該屬性,則搜索其默認(rèn)列表。

最后,代碼從名為appProperties的文件中將一組屬性加載到applicationProps中,此文件中的屬性是上次調(diào)用時(shí)從應(yīng)用程序保存的屬性,如下一節(jié)中所述。

保存屬性

以下示例使用Properties.store從上一個(gè)示例中寫出應(yīng)用程序?qū)傩?,每次都不需要保存默認(rèn)屬性,因?yàn)樗鼈冇肋h(yuǎn)不會(huì)更改。

FileOutputStream out = new FileOutputStream("appProperties");
applicationProps.store(out, "---No Comment---");
out.close();

store方法需要一個(gè)要寫入的流,以及一個(gè)用作輸出頂部注釋的字符串。

獲取屬性信息

應(yīng)用程序設(shè)置其Properties對(duì)象后,應(yīng)用程序可以查詢對(duì)象以獲取有關(guān)其包含的各種鍵和值的信息,應(yīng)用程序在啟動(dòng)后從Properties對(duì)象獲取信息,以便它可以根據(jù)用戶的選擇初始化自身,Properties類有幾種獲取屬性信息的方法:

contains(Object value)containsKey(Object key)
如果值或鍵位于Properties對(duì)象中,則返回true,屬性從Hashtable繼承這些方法,因此,它們接受Object參數(shù),但只應(yīng)使用String值。

getProperty(String key)getProperty(String key, String default)
返回指定屬性的值,第二個(gè)版本提供默認(rèn)值,如果未找到鍵,則返回默認(rèn)值。

list(PrintStream s)list(PrintWriter w)
將所有屬性寫入指定的流或?qū)懭肫鳎@對(duì)調(diào)試很有用。

elements()、keys()、和propertyNames()
返回包含Properties對(duì)象中包含的鍵或值(由方法名稱指示)的Enumeration,keys方法只返回對(duì)象本身的鍵,propertyNames方法也返回默認(rèn)屬性的鍵。

stringPropertyNames()
propertyNames類似,但返回Set,并且僅返回其中鍵和值都是字符串的屬性的名稱,請(qǐng)注意,Set對(duì)象不受Properties對(duì)象的支持,因此一個(gè)對(duì)象的更改不會(huì)影響另一個(gè)。

size()
返回當(dāng)前鍵/值對(duì)的數(shù)量。

設(shè)置屬性

在執(zhí)行期間用戶與應(yīng)用程序的交互可能會(huì)影響屬性設(shè)置,這些更改應(yīng)反映在Properties對(duì)象中,以便在應(yīng)用程序退出時(shí)保存它們(并調(diào)用store方法),以下方法更改Properties對(duì)象中的屬性:

setProperty(String key, String value)
將鍵/值對(duì)放在Properties對(duì)象中。

remove(Object key)
移除與鍵關(guān)聯(lián)的鍵/值對(duì)。

上面描述的一些方法是在Hashtable中定義的,因此接受除String之外的鍵和值參數(shù)類型,始終使用字符串作為鍵和值,即使該方法允許其他類型,也不要在Properties對(duì)象上調(diào)用Hashtable.setHastable.setAll,始終使用Properties.setProperty。
命令行參數(shù)

Java應(yīng)用程序可以從命令行接受任意數(shù)量的參數(shù),這允許用戶在啟動(dòng)應(yīng)用程序時(shí)指定配置信息。

用戶在調(diào)用應(yīng)用程序時(shí)輸入命令行參數(shù),并在要運(yùn)行的類的名稱后指定它們。例如,假設(shè)一個(gè)名為Sort的Java應(yīng)用程序?qū)ξ募械男羞M(jìn)行排序,要對(duì)名為friends.txt的文件中的數(shù)據(jù)進(jìn)行排序,用戶將輸入:

java Sort friends.txt

啟動(dòng)應(yīng)用程序時(shí),運(yùn)行時(shí)系統(tǒng)會(huì)通過(guò)字符串?dāng)?shù)組將命令行參數(shù)傳遞給應(yīng)用程序的main方法,在前面的示例中,命令行參數(shù)在包含單個(gè)String:“friends.txt”的數(shù)組中傳遞給Sort應(yīng)用程序。

回應(yīng)命令行參數(shù)

Echo示例多帶帶在一行上顯示其每個(gè)命令行參數(shù):

public class Echo {
    public static void main (String[] args) {
        for (String s: args) {
            System.out.println(s);
        }
    }
}

以下示例顯示用戶如何運(yùn)行Echo

java Echo Drink Hot Java
Drink
Hot
Java

請(qǐng)注意,應(yīng)用程序多帶帶顯示每個(gè)單詞 — Drink、Hot和Java,這是因?yàn)榭崭褡址指袅嗣钚袇?shù),要將Drink、Hot和Java解釋為單個(gè)參數(shù),用戶可以通過(guò)將它們括在引號(hào)內(nèi)來(lái)加入它們。

java Echo "Drink Hot Java"
Drink Hot Java
解析數(shù)字命令行參數(shù)

如果應(yīng)用程序需要支持?jǐn)?shù)字命令行參數(shù),它必須將表示數(shù)字的String參數(shù)(例如“34”)轉(zhuǎn)換為數(shù)字值,這是一個(gè)將命令行參數(shù)轉(zhuǎn)換為int的代碼片段:

int firstArg;
if (args.length > 0) {
    try {
        firstArg = Integer.parseInt(args[0]);
    } catch (NumberFormatException e) {
        System.err.println("Argument" + args[0] + " must be an integer.");
        System.exit(1);
    }
}

如果args[0]的格式無(wú)效,則parseInt會(huì)拋出NumberFormatException,所有Number類 — Integer、Float、Double等 — 都有parseXXX方法,它們將表示數(shù)字的String轉(zhuǎn)換為其類型的對(duì)象。

環(huán)境變量

許多操作系統(tǒng)使用環(huán)境變量將配置信息傳遞給應(yīng)用程序,與Java平臺(tái)中的屬性一樣,環(huán)境變量是鍵/值對(duì),其中鍵和值都是字符串,設(shè)置和使用環(huán)境變量的約定因操作系統(tǒng)和命令行解釋器之間而異,要了解如何將環(huán)境變量傳遞給系統(tǒng)上的應(yīng)用程序,請(qǐng)參閱系統(tǒng)文檔。

查詢環(huán)境變量

在Java平臺(tái)上,應(yīng)用程序使用System.getenv來(lái)檢索環(huán)境變量值,如果沒(méi)有參數(shù),getenv將返回java.util.Map的只讀實(shí)例,其中映射鍵是環(huán)境變量名稱,映射值是環(huán)境變量值,這在EnvMap示例中進(jìn)行了演示:

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n",
                              envName,
                              env.get(envName));
        }
    }
}

使用String參數(shù),getenv返回指定變量的值,如果未定義變量,則getenv返回null,Env示例使用getenv以這種方式查詢?cè)诿钚猩现付ǖ奶囟ōh(huán)境變量:

public class Env {
    public static void main (String[] args) {
        for (String env: args) {
            String value = System.getenv(env);
            if (value != null) {
                System.out.format("%s=%s%n",
                                  env, value);
            } else {
                System.out.format("%s is"
                    + " not assigned.%n", env);
            }
        }
    }
}
將環(huán)境變量傳遞給新進(jìn)程

當(dāng)Java應(yīng)用程序使用ProcessBuilder對(duì)象創(chuàng)建新進(jìn)程時(shí),傳遞給新進(jìn)程的默認(rèn)環(huán)境變量集與提供給應(yīng)用程序虛擬機(jī)進(jìn)程的集合相同,應(yīng)用程序可以使用ProcessBuilder.environment更改此集。

平臺(tái)依賴問(wèn)題

在不同系統(tǒng)上實(shí)現(xiàn)環(huán)境變量的方式之間存在許多細(xì)微差別,例如,Windows忽略環(huán)境變量名稱中的大小寫,而UNIX則不會(huì)。使用環(huán)境變量的方式也各不相同,例如,Windows在名為USERNAME的環(huán)境變量中提供用戶名,而UNIX實(shí)現(xiàn)可能在USER、LOGNAME或兩者中提供用戶名。

為了最大化可移植性,當(dāng)系統(tǒng)屬性中的相同值可用時(shí),請(qǐng)不要引用環(huán)境變量,例如,如果操作系統(tǒng)提供用戶名,則它將始終在系統(tǒng)屬性user.name中可用。

其他配置實(shí)用程序

以下是一些其他配置實(shí)用程序的匯總。

Preferences API允許應(yīng)用程序在依賴于實(shí)現(xiàn)的備份存儲(chǔ)中存儲(chǔ)和檢索配置數(shù)據(jù),支持異步更新,并且多個(gè)線程甚至多個(gè)應(yīng)用程序可以安全地更新同一組首選項(xiàng),有關(guān)更多信息,請(qǐng)參閱Preferences API指南。

部署在JAR存檔中的應(yīng)用程序使用manifest來(lái)描述存檔的內(nèi)容,有關(guān)更多信息,請(qǐng)參閱JAR文件中的打包程序課程。

Java Web Start應(yīng)用程序的配置包含在JNLP文件中,有關(guān)更多信息,請(qǐng)參閱Java Web Start課程。

Java Plug-in applet的配置部分取決于用于在網(wǎng)頁(yè)中嵌入applet的HTML標(biāo)記,這些標(biāo)記可以包含、,具體取決于applet和瀏覽器,有關(guān)更多信息,請(qǐng)參閱Java Applets課程。

java.util.ServiceLoader類提供了一個(gè)簡(jiǎn)單的service provider設(shè)施,service provider是service的實(shí)現(xiàn) — 一組眾所周知的接口和(通常是抽象的)類。service provider中的類通常實(shí)現(xiàn)接口并子類化service中定義的類,service provider可以作為擴(kuò)展安裝(請(qǐng)參閱擴(kuò)展機(jī)制),通過(guò)將Providers添加到類路徑或通過(guò)其他特定于平臺(tái)的方式,也可以使Providers可用。

上一篇:原子變量 下一篇:系統(tǒng)實(shí)用工具

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73691.html

相關(guān)文章

  • IDEA 和 Eclipse 集成開(kāi)發(fā)工具 配置 Java API 幫助文檔教程

    摘要:為了達(dá)到這個(gè)效果,還需要對(duì)開(kāi)發(fā)工具進(jìn)行設(shè)置。至此,配置幫助文檔就完成了??梢宰约赫{(diào)用一個(gè)庫(kù)函數(shù)測(cè)試一下效果。按照下圖配置即可,這樣是為了使鼠標(biāo)光標(biāo)放到庫(kù)函數(shù)上時(shí),幫助信息以小窗口的方式彈出。 ...

    Gemini 評(píng)論0 收藏0
  • 【精致Java教程】03:安裝JDK和配置Java環(huán)境變量

    摘要:運(yùn)行環(huán)境,它是程序運(yùn)行的所必需的環(huán)境集合。安裝下一步下一步即可,要記得安裝路徑。配置環(huán)境變量安裝完以后需要對(duì)系統(tǒng)的環(huán)境變量進(jìn)行配置才能開(kāi)發(fā)。之所以不能運(yùn)行是因?yàn)檠b類之后還得配置環(huán)境變量。 在了解了Java歷史、特性、作用和跨平臺(tái)原理之后,我們可以開(kāi)始為Java開(kāi)發(fā)做準(zhǔn)備工作了,只是在此之前我們還需要了解Java的兩大基礎(chǔ)概念JDK(Java Development kit)和JRE(J...

    CoyPan 評(píng)論0 收藏0
  • Centos7.6安裝4.0.8MongoDb教程

    摘要:本博客貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處本系列教程為項(xiàng)目附帶。歷史文章如何在安裝最新版安裝安裝最新版的入門教程的入門教程安裝流程下載的最新資源包,大家也可以關(guān)注我的公眾號(hào)貓說(shuō),回復(fù)工具包,獲取全部資源工具?;蛘咧苯拥焦倬W(wǎng)下載,地址下載完成,使用上傳 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處本系列教程為HMStrange項(xiàng)目附帶。 歷史文章 如何在VMware12安裝Centos7.6最新版 Ce...

    Yujiaao 評(píng)論0 收藏0
  • Centos7.6安裝4.0.8MongoDb教程

    摘要:本博客貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處本系列教程為項(xiàng)目附帶。歷史文章如何在安裝最新版安裝安裝最新版的入門教程的入門教程安裝流程下載的最新資源包,大家也可以關(guān)注我的公眾號(hào)貓說(shuō),回復(fù)工具包,獲取全部資源工具?;蛘咧苯拥焦倬W(wǎng)下載,地址下載完成,使用上傳 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處本系列教程為HMStrange項(xiàng)目附帶。 歷史文章 如何在VMware12安裝Centos7.6最新版 Ce...

    _ivan 評(píng)論0 收藏0
  • Java? 教程(系統(tǒng)實(shí)用工具

    系統(tǒng)實(shí)用工具 System類實(shí)現(xiàn)了許多系統(tǒng)實(shí)用程序,其中一些已在上一節(jié)配置實(shí)用程序中介紹過(guò),本節(jié)介紹一些其他系統(tǒng)實(shí)用程序。 命令行I/O對(duì)象 系統(tǒng)提供了幾個(gè)預(yù)定義的I/O對(duì)象,這些對(duì)象在Java應(yīng)用程序中非常有用,可以從命令行啟動(dòng),它們實(shí)現(xiàn)了大多數(shù)操作系統(tǒng)提供的標(biāo)準(zhǔn)I/O流,以及用于輸入密碼的控制臺(tái)對(duì)象,有關(guān)更多信息,請(qǐng)參閱基礎(chǔ)I/O課程中的命令行I/O。 系統(tǒng)屬性 在屬性中,我們研究了應(yīng)用程序可...

    leonardofed 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<