2013-08-23 83 views
3

我的應用程序使用String str = System.getProperty("key","default");因爲我不能夠設置在屬性文件中的鍵值對,它總是返回默認值。System.getProperty(「key」)從哪裏讀取哪個屬性文件?

我試着在位於users-> appdata-> locallow-> sun-> java> deployment的deployment.properties文件中設置它,並且直接在java控制面板中將運行時參數中的key = value放入工作中。

請幫我正確設置它,如果存在不同的屬性文件,其中這些值是要設置,請分享的路徑? 我谷歌它但無法找到。感謝在前

編輯:我們使用jeety服務器進行部署。並且我們有許多屬性文件與我們的源代碼捆綁在一起。

+0

這是什麼類型的應用程序?如果是網絡/企業應用程序(即WAR或EAR部署),請同時提及您正在使用的應用程序服務器。 – mthmulders

+0

@mthmulders它基本上是一個客戶端服務器應用程序。我們使用IE作爲我們的客戶端,在服務器端部署jetty服務器。 –

+0

看看[Jetty配置參考](http://wiki.eclipse.org/Jetty/Reference/jetty.xml_usage#Setting_Parameters_in_Configuration_Files) – mthmulders

回答

2

如果你想設置爲系統自定義屬性文件的功能。getProperty,這是我們在這裏做的: 1.創建一個基類作爲您爲Web應用程序創建的所有類的基礎對象。 2.在基類中,編寫代碼

java.io.InputStream is = loader.getResourceAsStream("custom system property filename"); 
System.getProperties().load(is); 
3

無需添加一個單獨的文件。

使用setProperties方法。

要修改現有的一組系統屬性,請使用System.setProperties。此方法接受已初始化的Properties對象以包含要設置的屬性。此方法用由Properties對象表示的新集替換整個系統屬性集。

警告:更改系統屬性有潛在危險,應該謹慎處理。許多系統屬性在啓動後不會重新讀取,並且僅供參考。改變某些屬性可能會產生意想不到的副作用。

Official Docs

如果你仍然要創建:Example by docs

+0

缺點是這需要硬編碼屬性,而系統屬性是一個很好的(而不是唯一的)方法來避免在程序中對值進行硬編碼。 – mthmulders

+0

@SURSEH ATTA實際上我需要知道它從何處讀取(getProperty)或寫入(setProperty)。從這些方法閱讀文字的excat文件。 –

+0

@RajeshKumar恕我直言,[這些正在解決在運行時](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/System.java# System.0props),而不是來自文件。當你使用setproperty()時,那些常量被賦值。 –

1

嗯,這涉及到一個JVM的全球系統的System.getProperty(String)收益性。 Here you can find可用屬性的列表。

如果要加載屬性的自定義文件,你應該加載自己的屬性此文件對象,其中你可以find an example here。您應該保留這個Properties object獨立的系統屬性。你不應該只將你的自定義屬性加載到系統屬性中。 (你可以通過System.setProperties(Properties)這樣做。)這就像定義全局變量sign of poor program design一樣。

+0

嗨,其實我的情況是跟蹤我們客戶使用的現有應用程序中的一些xml實例。現在我必須找到一種方法來將此「鍵」設置爲默認值以外的值,以便可以完成跟蹤。 –

+0

然後您可以考慮:'System.getProperties()。setProperty(「key」,「value」)''。 –

0

Java類系統屬性被自動地由JVM設置。您可以通過將-D開關傳遞到運行時添加其他屬性,例如,

java -Dkey=blue -Dhopp=topp .... 

+0

我已經試過了,但沒有工作。僅返回默認值。有沒有其他的選擇?據我所知 - D是布爾值。 Plaese建議 –

+0

是的,它可以從命令提示符執行,但不能從java控制面板執行。 –

1

的值是在運行時使用本機代碼集。其System.c內集,名爲Java_java_lang_System_initProperties

片段

JNIEXPORT jobject JNICALL 
Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) 
{ 
    char buf[128]; 
    java_props_t *sprops = GetJavaProperties(env); 
    jmethodID putID = (*env)->GetMethodID(env, 
              (*env)->GetObjectClass(env, props), 
              "put", 
      "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); 
    jmethodID removeID = (*env)->GetMethodID(env, 
              (*env)->GetObjectClass(env, props), 
              "remove", 
      "(Ljava/lang/Object;)Ljava/lang/Object;"); 
    jmethodID getPropID = (*env)->GetMethodID(env, 
              (*env)->GetObjectClass(env, props), 
              "getProperty", 
      "(Ljava/lang/String;)Ljava/lang/String;"); 
    jobject ret = NULL; 
    jstring jVMVal = NULL; 

    if (sprops == NULL || putID == NULL) return NULL; 

    PUTPROP(props, "java.specification.version", 
      JDK_MAJOR_VERSION "." JDK_MINOR_VERSION); 
    PUTPROP(props, "java.specification.name", 
      "Java Platform API Specification"); 
    PUTPROP(props, "java.specification.vendor", 
      JAVA_SPECIFICATION_VENDOR); 

    PUTPROP(props, "java.version", RELEASE); 
    PUTPROP(props, "java.vendor", VENDOR); 
    PUTPROP(props, "java.vendor.url", VENDOR_URL); 
    PUTPROP(props, "java.vendor.url.bug", VENDOR_URL_BUG); 
    ....... 
    ....... 
    .......