तो, आप एक फ़ाइल के रूप में मुख्य/runnable जार के रूप में एक ही फ़ोल्डर के बजाय का एक संसाधन के रूप में अपने .properties
फ़ाइल का इलाज करना चाहते हैं मुख्य/चलने योग्य जार।
पहले पहली बात:
: आपका प्रोग्राम फ़ाइल वास्तुकला इस तरह होगा (यह मानते हुए अपने मुख्य कार्यक्रम main.jar है और इसके मुख्य गुण फ़ाइल main.properties है) उस मामले में, अपने ही समाधान इस प्रकार है
./ - the root of your program
|__ main.jar
|__ main.properties
इस आर्किटेक्चर के साथ, आप main.properties फ़ाइल में किसी भी प्रॉपर्टी को किसी भी टेक्स्ट एडिटर का उपयोग करके संशोधित कर सकते हैं या आपका मुख्य.जर चल रहा है (प्रोग्राम की वर्तमान स्थिति के आधार पर) क्योंकि यह केवल एक टेक्स्ट-आधारित है फ़ाइल। उदाहरण के लिए, अपने main.properties फ़ाइल हो सकती है:
app.version=1.0.0.0
app.name=Hello
इसलिए, जब आप इसके जड़/आधार फ़ोल्डर से अपने मुख्य कार्यक्रम चलाने के लिए, सामान्य रूप से आप इसे इस प्रकार चलेंगे:
java -jar ./main.jar
या, सीधे:
java -jar main.jar
अपने main.jar में, आप अपने main.properties फ़ाइल में पाए हर प्रॉपर्टी के लिए कुछ उपयोगिता तरीकों बनाने के लिए की जरूरत है;
/**
* Gets the app.version property value from
* the ./main.properties file of the base folder
*
* @return app.version string
* @throws IOException
*/
public static String getAppVersion() throws IOException{
String versionString = null;
//to load application's properties, we use this class
Properties mainProperties = new Properties();
FileInputStream file;
//the base folder is ./, the root of the main.properties file
String path = "./main.properties";
//load the file handle for main.properties
file = new FileInputStream(path);
//load all the properties from this file
mainProperties.load(file);
//we have loaded the properties, so close the file handle
file.close();
//retrieve the property we are intrested, the app.version
versionString = mainProperties.getProperty("app.version");
return versionString;
}
मुख्य कार्यक्रम है कि app.version
मूल्य की जरूरत के किसी भी भाग में, हम अपने विधि कॉल इस प्रकार है:: कहते हैं कि app.version
संपत्ति getAppVersion()
विधि इस प्रकार होगा जाने
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
देखें [यह उत्तर] (http://stackoverflow.com/a/5052359/418556) - * "इसके बजाय जार के अंदर 'डिफ़ॉल्ट' फ़ाइल को स्टोर करें। अगर यह बदला जाता है, तो स्टोर बदली गई फाइल किसी अन्य जगह पर। एक सामान्य स्थान 'user.home' की उप-निर्देशिका है। फ़ाइल की जांच करते समय, पहले फ़ाइल सिस्टम पर एक बदली गई फ़ाइल के अस्तित्व की जांच करें, और यदि यह अस्तित्व में नहीं है, तो डिफ़ॉल्ट फ़ाइल लोड करें। "* ** बीटीडब्ल्यू ** *" मैं नहीं चाहता .. "* आप क्या क्या काम करता है और व्यावहारिक है उससे कम महत्वपूर्ण है। एप्लिकेशन निर्देशिका में ऐप स्टोर करना ओरेकल और एमएस (और शायद अन्य) दोनों द्वारा दृढ़ता से निराश होता है। –
कारण है कि मुझे जार निर्देशिका में गुण फ़ाइल रखने की आवश्यकता है जब उन्हें पूरी निर्देशिका (जार और संपत्ति समेत) की प्रतिलिपि बनाई जाती है तो उन्हें एक साथ रखना बेहतर होता है और चलाया जाता है। – SoulMan
और यदि मैं उपयोगकर्ता को प्रॉपर्टी फ़ाइल पथ पास करने के लिए मजबूर करता हूं तो उसे बैच चलाने पर हर बार इसे बदलना होगा एक अलग मशीन से फ़ाइल। – SoulMan