2010-09-17 10 views
7

मैं अपने उत्पादन .properties फ़ाइल के लिए, /home/username हार्ड कोडिंग के बिना, एक कार्यशील निर्देशिका (work.dir=/home/username/working-directory कहें) के लिए एक संपत्ति को परिभाषित करना चाहता हूं।किसी उपयोगकर्ता द्वारा परिभाषित .properties फ़ाइल में सिस्टम प्रॉपर्टी का संदर्भ कैसे लें?

मैं पर जगह में सिस्टम संपत्ति user.home संदर्भ लेना चाहते हैं हार्ड-कोडेड /home/username, work.dir अधिक सामान्य बनाने के लिए।

मैं सिस्टम प्रॉपर्टी का संदर्भ कैसे दूं और इसे उपयोगकर्ता द्वारा परिभाषित .properties में अन्य उपयोगकर्ता परिभाषित स्ट्रिंग्स को जोड़ूं?

नोट: मैं अपने जावा कोड में उपयोगकर्ता की संपत्ति को एक्सेस नहीं करना चाहता हूं, लेकिन .properties जो मैंने परिभाषित किया है। मैं अपने उत्पादन और विकास (उदाहरण के लिए जुनीट परीक्षण) दोनों के लिए अलग-अलग मूल्य के साथ work.dir के मान को प्रतिस्थापित करने में सक्षम होना चाहता हूं।

उत्तर

4

फ़ाइल से संपत्ति प्राप्त करें, फिर समर्थित मैक्रोज़ को प्रतिस्थापित करें।

String propertyValue = System.getProperty("work.dir"); 
String userHome = System.getProperty("user.home"); 
String evaluatedPropertyValue = propertyValue.replace("$user.home", userHome); 
0

यह सुविधा java.util.Properties में उपलब्ध नहीं है। लेकिन कई पुस्तकालयों में गुणों के लिए परिवर्तनीय प्रतिस्थापन जोड़ें।

public interface SystemPropertiesExample extends Config { 
    @DefaultValue("Welcome: ${user.name}") 
    String welcomeString(); 

    @DefaultValue("${TMPDIR}/tempFile.tmp") 
    File tempFile(); 
} 

SystemPropertiesExample conf = 
     ConfigFactory.create(SystemPropertiesExample.class, System.getProperties(), System.getenv()); 
String welcome = conf.welcomeString(); 
File temp = conf.tempFile(); 
2

आप Commons Configuration के साथ अपने गुण का प्रबंधन और Variable Interpolation

तो उपयोग कर सकते हैं:

यहाँ आप OWNER API लाइब्रेरी का उपयोग करने के लिए कोशिश कर रहे हैं का एक उदाहरण (अनुच्छेद "आयात गुण" देखें) आप चींटी या मेवेन से परिचित हैं, आप निश्चित रूप से पहले से ही चर (जैसे ${token}) का सामना कर चुके हैं जो कॉन्फ़िगरेशन फ़ाइल लोड होने पर स्वचालित रूप से विस्तारित हो जाते हैं। कॉमन्स विन्यास

यह एक .properties

work.dir=${user.home}/working-directory 
साथ दायर की अनुमति होगी [...] के रूप में अच्छी तरह से इस सुविधा का समर्थन
संबंधित मुद्दे