2011-01-08 16 views
5

आप .xml फ़ाइल को खोलने के बारे में कैसे जाएंगे जो कि .jar के भीतर है और इसे संपादित करें?जावा के साथ .jar में फ़ाइल खोलें और संपादित करें?

मुझे पता है आप कर सकते हैं कि ...

InputStream myStream = this.getClass().getResourceAsStream("xmlData.xml"); 

लेकिन आप xmlData.xml खोलेगा, फ़ाइल को संपादित, और .jar में सहेज लिया जाए? मुझे यह जानने के लिए उपयोगी लगेगा और .jar ... के बाहर एक फ़ाइल को संपादित नहीं करना चाहते हैं और एप्लिकेशन को पूरे समय चलने की जरूरत है!

धन्यवाद!

+0

आवेदन है कि एक ही जार फ़ाइल कि xmlData.xml अंदर xml फ़ाइल को संशोधित करता है है? – Enrique

+0

वे एक ही में से एक हैं ... .jar इसके अंदर .xml फ़ाइल है ... मैं .jar फ़ाइल चल रहा है और .jar आवेदन चाहते हूँ यह – Zeveso

उत्तर

3

जार फ़ाइलें अलग-अलग फ़ाइल प्रत्यय के साथ .zip फ़ाइलें हैं, और सामग्री के लिए नामकरण सम्मेलन हैं। तो सामग्री पढ़ने और/या लिखने के लिए java.util.zip से कक्षाओं का उपयोग करें।

को संशोधित सामग्री की गारंटी है नहीं (या यहाँ तक होने की संभावना) चल प्रणाली को प्रभावित करने के रूप में वर्ग लोडर सामग्री संचित कर सकता है के रूप में यह फिट देखता है।

तो यह जानना अच्छा होगा कि आप वास्तव में इसके साथ क्या हासिल करने की कोशिश कर रहे हैं। एक जार ऑन-द-फ्लाई की सामग्री को जटिल और त्रुटि-प्रवण दृष्टिकोण की तरह लगता है ...

+0

के अंदर .xml संपादित करने के लिए मैं सभी संग्रहीत करना चाहते हैं .jar फ़ाइल के अंदर .xml फ़ाइल में मेरे डेटा ... यह हो जाएगा नाम ईमेल और एक .jar फ़ाइल के भीतर एक xml फ़ाइल में इस तरह के – Zeveso

+0

तो तुम बने रहे डेटा तरह बातें? क्या होता है जब आपको अपने ऐप को फिर से तैनात करना होगा? मान लें कि आप एक्सएमएल का उपयोग कर चिपकना चाहते हैं। आपको उस एक्सएमएल फ़ाइल की फाइल सिस्टम पर स्थान सेट करने के लिए अपने ऐप के बाहर .xml फ़ाइल को जारी रखने और कॉन्फ़िगरेशन का उपयोग करना चाहिए (शायद एक .properties फ़ाइल या स्प्रिंग के साथ?)। बाइनरी अखंडता जैसी चीजों को सुनिश्चित करने के लिए .jars की सामग्री अकेली रहनी चाहिए। – whaley

+1

मुझे सच में नहीं लगता कि इसे साफ किया जा सकता है। सबसे पहले आपको जार फ़ाइल को पहली जगह ढूंढने के मुद्दे को हल करना होगा (क्लासलोडर पेड़ चलाना या जावा प्रक्रिया लॉन्च पैरा का निरीक्षण करना)। उसके बाद आप फ़ाइल अनज़िप, संपादित करें, और फ़ाइल repack को java.util.zip का उपयोग करें और फिर आप प्रार्थना करते हैं कि classloader कैशिंग आपकी अपडेट की गई फ़ाइल को पढ़ने जाएगा। नहीं किया जाना चाहिए :)। –

1

यदि आप ऐप करते हैं। एक जीयूआई है और आपके पास एक वेब साइट/सर्वर तक पहुंच है, जेडब्ल्यूएस जवाब हो सकता है। जेएनएलपी एपीआई जो जेडब्ल्यूएस ऐप्स के लिए उपलब्ध है। PersistenceService जैसी सेवाएं प्रदान करता है। यहां एक छोटा demo. of the PersistenceService है।

विचार जेडब्लूएस दृढ़ता स्टोर में एक्सएमएल की जांच करना होगा। यदि यह वहां नहीं है, तो वहां लिखें, अन्यथा कैश किए गए संस्करण का उपयोग करें। यदि यह बदलता है, तो स्टोर में एक नया संस्करण लिखें।

डेमो। स्टोर को बंद करने पर लिखता है, और स्टार्ट-अप पर पढ़ता है। लेकिन वहाँ कोई कारण नहीं है कि यह एक मेनू आइटम से नहीं कहा जा सकता, टाइमर आदि

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