2008-10-11 14 views
15

आप उपयोगकर्ता-विशिष्ट और मशीन विशिष्टक्रम विन्यास J2SE आवेदन के लिए डेटा जहां की दुकान करते हैं?जावा में ऐप के conf डेटा को स्टोर करने का उचित तरीका क्या है?

(उदाहरण के लिए, C: \ Users \ USERNAME \ AppData \ रोमिंग \ Windows पर और /घर/उपयोगकर्ता नाम यूनिक्स पर)

कैसे आप में फाइल सिस्टम में इन स्थानों को मिलता है मंच स्वतंत्र मार्ग?

आपकी सलाह के लिए धन्यवाद!

उत्तर

13

कि J2SE आवेदन की अपनी तरह पर निर्भर करता है:

  • J2SE निष्पादन योग्य JAR फ़ाइल (बहुत सरल): user.home System property का उपयोग घर-निर्देशिका खोजने के लिए। फिर तदनुसार एक उपदिर बनाएं (जैसे पीजीपी, एसवीएन, ... करें)
  • जावा वेब स्टार्ट सुरक्षित गुणों के लिए बहुत अच्छी तरह से शामिल विधियां प्रदान करता है। हमेशा उपयोगकर्ता-विशिष्ट
  • अंत में आरसीपी ग्रहण: उपयोगकर्ताओं और विन्यास (पूरी तरह यकीन नहीं कैसे Vista में है कि मुश्किल तक पहुँचने के लिए) कंप्यूटर विस्तृत उपयोग के लिए के लिए वहाँ आप कार्यक्षेत्र (भी user.home से प्राप्त) की धारणा है

देखभाल के साथ उपयोग किए जाने पर ये सभी दृष्टिकोण सही हैं - सही separatorChar - ओएस तटस्थ का उपयोग करें।

0

उपयोगकर्ता विशिष्ट कॉन्फ़िगरेशन के लिए, आप "user.home" सिस्टम प्रॉपर्टी द्वारा इंगित फ़ोल्डर में एक कॉन्फ़िगरेशन फ़ाइल लिख सकते हैं। निश्चित रूप से उस मशीन पर काम करेगा।

5

जावा में विशेष रूप से java.util.prefs.Preferences में ऐसा करने के लिए लाइब्रेरी है।

Preferences userPrefs = Preferences.getUserNodeForPackage(MyClass.class); // Gets user preferences node for MyClass 
Preferences systemPrefs = Preferences.getSysteNodeForPackage(MyClass.class); // Gets system preferences node for MyClass 
Preferences userPrefsRoot = Preferences.getUserRoot(); // Gets user preferences root node 
Preferences systemPrefsRoot = Preferences.getSystemRoot(); // Gets system preferences root node 
25

प्रारूप पर पहली:

  1. जावा property files कुंजी/मान जोड़े (भी स्वतः नई पंक्ति वर्ण संभाल) के लिए अच्छे हैं। 'डॉट नोटेशन' का उपयोग करके संरचना की एक डिग्री संभव है। दोष यह है कि संरचना आपको शीर्ष-स्तरीय कॉन्फ़िगरेशन इकाइयों को आसानी से गणना करने और ड्रिल-डाउन तरीके से काम करने की अनुमति नहीं देती है। अक्सर ट्विक करने योग्य पर्यावरण-विशिष्ट सेटिंग्स के छोटे सेट के लिए उपयोग किया जाता है
  2. एक्सएमएल फाइलें - अक्सर विभिन्न जावा ढांचे (विशेष रूप से जे 2 ईई और वसंत) की अधिक जटिल कॉन्फ़िगरेशन के लिए उपयोग की जाती हैं। मैं सलाह दूंगा कि आप कम से कम Spring सीखें - इसमें यह जानने के लायक कई विचार हैं, भले ही आप इसका उपयोग न करें। यदि आप अपना स्वयं का एक्सएमएल कॉन्फ़िगरेशन रोल करने का निर्णय लेते हैं, तो मैं अनुकूलित सीरियलाइजेशन विकल्पों के साथ XStream का उपयोग करने की सलाह दूंगा या यदि आपको कुछ एक्सएमएल पार्स करने की ज़रूरत है, तो XOM पर एक नज़र डालें। बीटीडब्ल्यू स्प्रिंग आपको अपनी कस्टम एक्सएमएल कॉन्फ़िगरेशन भाषा प्लग करने की अनुमति देता है, लेकिन यह relatively complex task है। एक्सएमएल कॉन्फ़िगरेशन का उपयोग सबसे जटिल 'आंतरिक' कॉन्फ़िगरेशन के लिए किया जाता है जो अंतिम उपयोगकर्ता द्वारा नहीं देखा या tweaked नहीं है।
  3. सीरियलाइज्ड जावा ऑब्जेक्ट्स - किसी ऑब्जेक्ट की स्थिति को बनाए रखने और बाद में इसे पुनर्स्थापित करने का एक तेज़ और आसान तरीका। उपयोगी अगर आप कॉन्फ़िगरेशन जीयूआई लिखते हैं और आपको परवाह नहीं है कि कॉन्फ़िगरेशन मानव पठनीय है या नहीं। जब आप कक्षाएं विकसित करते हैं तो compatibility issues से सावधान रहें।
  4. प्राथमिकताएं - Java 1.4 में पेश की गईं, आपको प्लेटफ़ॉर्म-विशिष्ट स्टोरेज में टाइप किए गए टेक्स्ट, संख्याएं, बाइट एरे और अन्य प्राइमेटिव स्टोर करने की अनुमति देती है। विंडोज़ पर, यह रजिस्ट्री है (आप /सॉफ़्टवेयर/जावासोफ्ट/प्रीफ़ के बीच HKLM या HKCU के बीच चुन सकते हैं)। यूनिक्स के तहत एक ही एपीआई उपयोगकर्ता के घर या /आदि के तहत फाइलें बनाता है। प्रत्येक prefs hive निर्यात और एक्सएमएल फ़ाइल के रूप में आयात किया जा सकता है। आप अपने कार्यान्वयन वर्ग नाम में "java.util.prefs.PreferencesFactory" JVM प्रॉपर्टी सेट करके PreferencesFactory इंटरफ़ेस के कस्टम कार्यान्वयन को निर्दिष्ट कर सकते हैं।

सामान्य रूप से prefs API का उपयोग करके आपके ऐप परिदृश्य के आधार पर एक अच्छी या बुरी चीज हो सकती है।

  1. यदि आप अलग-अलग कॉन्फ़िगरेशन के साथ उसी मशीन पर चल रहे एक ही कोड के एकाधिक संस्करणों की योजना बनाने की योजना बना रहे हैं, तो प्राथमिकता API का उपयोग करना एक बुरा विचार है।
  2. यदि आप प्रतिबंधित वातावरण (विंडोज डोमेन या कसकर प्रबंधित यूनिक्स बॉक्स) में एप्लिकेशन का उपयोग करने की योजना बना रहे हैं तो आपको यह सुनिश्चित करना होगा कि आपके पास आवश्यक रजिस्ट्री कुंजियों/निर्देशिकाओं तक उचित पहुंच हो। इसने मुझे एक से अधिक बार आश्चर्य से पकड़ा है।
  3. रोमिंग प्रोफाइल (दोहराए गए घर डीआईआर) से सावधान रहें, जब वे एक से अधिक सक्रिय मशीनें शामिल होते हैं तो वे कुछ अजीब परिदृश्यों के लिए तैयार होते हैं।
  4. प्राथमिकताएं एप्लिकेशन की निर्देशिका के तहत कॉन्फ़िगरेशन फ़ाइल के रूप में स्पष्ट नहीं हैं। अधिकांश डेस्कटॉप समर्थन कर्मचारी अपेक्षा नहीं करते हैं और उन्हें पसंद नहीं करते हैं।

प्रीफ़ के फ़ाइल लेआउट के संबंध में यह फिर से आपके एप्लिकेशन पर निर्भर करता है। एक सामान्य सुझाव है:

  1. अपने अधिकांश एक्सएमएल फाइलों को एप्लिकेशन के जेएआर के अंदर रूट या अंडर/मेटा-आईएनएफ निर्देशिका में पैकेज करें। ये फ़ाइलें केवल पढ़ने के लिए होंगी और आवेदन के लिए निजी मानी जाती हैं।
  2. उपयोगकर्ता संशोधित कॉन्फ़िगरेशन $ APP_HOME/conf के तहत रखें। इसमें मुख्य रूप से गुण फ़ाइलों और कभी-कभी एक साधारण XML फ़ाइल (XStream serialization) शामिल होना चाहिए। इन फ़ाइलों को स्थापना प्रक्रिया के हिस्से के रूप में tweaked हैं और आमतौर पर उपयोगकर्ता सेवा योग्य नहीं हैं।
  3. उपयोगकर्ता-घर के तहत, एक डॉट-निर्देशिका में (यानी '~/.myapplication') किसी भी उपयोगकर्ता कॉन्फ़िगरेशन को स्टोर करता है। उपयोगकर्ता कॉन्फ़िगरेशन conf निर्देशिका में किसी एक को ओवरराइड कर सकता है। आवेदन के भीतर से किए गए कोई भी बदलाव यहां जाएं (अगले बिंदु भी देखें)।
  4. आप इस एप्लिकेशन इंस्टेंस (उपयोगकर्ता के विपरीत) के लिए विशिष्ट किसी भी अन्य परिवर्तनीय डेटा को स्टोर करने के लिए $ APP_HOME/var निर्देशिका का भी उपयोग कर सकते हैं। इस दृष्टिकोण का एक अन्य लाभ यह है कि आप पूरे एप्लिकेशन को स्थानांतरित और बैकअप ले सकते हैं और यह एक निर्देशिका की सरल प्रतिलिपि द्वारा कॉन्फ़िगरेशन कर सकते हैं।

यह कॉन्फ़िगरेशन के प्रबंधन के लिए कुछ मानक तकनीकों को दिखाता है।आप अलग अलग पुस्तकालयों और उपकरणों का उपयोग करने के लिए उन्हें लागू कर सकते हैं, कच्चे JRE से शुरू, स्प्रिंग/Guice जोड़ने या एक पूर्ण J2EE कंटेनर के लिए जा रहा है (संभवतः एम्बेडेड वसंत के साथ)

विन्यास के प्रबंधन के लिए अन्य तरीके हैं:

  1. का उपयोग करना विभिन्न विन्यासों का उपयोग कर आवेदन के कई उदाहरण चलाने के लिए multiple base directories
  2. केंद्रीकृत विन्यास प्रबंधन
  3. एक केंद्रीय रूप से प्रबंधित विन्यास प्रबंधन डाटाबेस (CMDB) फ़ाइल के लिए lightweightregistries का उपयोग करना, प्रत्येक मशीन के लिए मेजबान-विशिष्ट मान से युक्त सभी उत्पादन मेजबान को हर रात rsync एड है। एप्लिकेशन एक टेम्पलेटेड कॉन्फ़िगरेशन का उपयोग करता है और वर्तमान होस्टनाम के आधार पर रनटाइम के दौरान सीएमडीबी से चयन करता है।
0

मैं इस

 

    String pathFile = null; 
    if(OS.contains("win")){ 
     pathFile = System.getenv("AppData"); 
    }else{ 
     pathFile = System.getProperty("user.home"); 
    } 

मैं अपने आवेदन की सेटिंग यहाँ सी बचाने का उपयोग: \ Users \ USERNAME \ AppData \ अन्य platfroms

पर खिड़कियों user.home (/ घर/उपयोगकर्ता नाम) पर
संबंधित मुद्दे

 संबंधित मुद्दे