2009-08-03 18 views
57

के अंदर एक फ़ाइल को संशोधित करना मैं अपने जार के अंदर एक फ़ाइल को संशोधित करना चाहता हूं। क्या मेरे आवेदन के भीतर से निकालने और फिर से जारिंग किए बिना ऐसा करना संभव है?एक जार

फ़ाइल जिसे मैं संशोधित करना चाहता हूं विन्यास फाइलें हैं, ज्यादातर एक्सएमएल आधारित हैं।

कारण मुझे कोई झटके में दिलचस्पी नहीं है कि एप्लिकेशन लॉन्च 4j के साथ लपेटा गया है यदि मैं इसे छोड़ देता हूं तो मैं .exe फ़ाइल को फिर से नहीं बना सकता।

+0

आप ऐसा क्यों करना चाहते हैं? –

+0

मैं फ़ाइल सिस्टम पर अस्थायी फ़ाइलों को बनाए किए बिना पूरक फाइलों को एप्लिकेशन के भीतर रखना चाहता हूं। –

+0

इस समाधान का प्रयास करें http://stackoverflow.com/a/4837522/1853864 मैंने उपयोग किया और मेरी समस्याएं हल हो गईं। –

उत्तर

61

आप के लिए jar

u विकल्प जावा ट्यूटोरियल से उपयोग कर सकते हैं

Updating a JAR File देखें।

पूरे जार को फिर से बनाने से काफी बेहतर है। इसे अपने प्रोग्राम के भीतर से आमंत्रित करना भी संभव लगता है। Running Command Line in Java

+0

बहुत बढ़िया! लेकिन उन्होंने पथनाम मजाकिया जोड़ा। Com.etc.etc के बजाय IE Bitbucket.foo.bar मौजूदा में – StarWind0

0

जब तक यह फ़ाइल नहीं है। क्लास, यानी संसाधन फ़ाइल या मैनिफेस्ट फ़ाइल - आप कर सकते हैं।

+0

और बिना, निकालने और फिर से जारिंग के बिना कैसे? –

9

जावा जार फ़ाइलें ज़िप फ़ाइलों के समान प्रारूप हैं - इसलिए यदि आपके पास एक ज़िप फ़ाइल उपयोगिता है जो आपको एक संग्रह को संशोधित करने देगी, तो आपके दरवाजे में आपका पैर होगा। दूसरी समस्या यह है कि, यदि आप किसी वर्ग या किसी चीज़ को दोबारा बनाना चाहते हैं, तो आपको शायद जार को फिर से बनाना होगा; लेकिन एक पाठ फ़ाइल या कुछ (उदाहरण के लिए xml) आसानी से पर्याप्त संशोधित किया जाना चाहिए।

1

क्या डीएफए ने कहा कि विस्तार करने के लिए, कारण यह है कि जार फ़ाइल ज़िप फ़ाइल की तरह स्थापित की गई है। अगर आप फ़ाइल को संशोधित करना चाहते हैं, तो आपको सभी प्रविष्टियों को पढ़ना होगा, जिसे आप बदलना चाहते हैं उसे संशोधित करें, और फिर प्रविष्टियों को जार फ़ाइल में वापस लिखें। मुझे पहले ऐसा करना पड़ा था, और यही वह तरीका था जिसे मैं कर सकता था।

संपादित

ध्यान दें कि यह आंतरिक जावा के लिए जार फ़ाइल संपादकों, जो फ़ाइल धाराएं हैं उपयोग कर रहा है। मुझे यकीन है कि ऐसा करने का एक तरीका है, आप पूरे जार को स्मृति में पढ़ सकते हैं, सब कुछ संशोधित कर सकते हैं, फिर फ़ाइल स्ट्रीम पर वापस लिख सकते हैं। यही वह है जो मुझे विश्वास है कि 7-ज़िप और अन्य जैसे यूटिलिटीज कर रहे हैं, क्योंकि मुझे लगता है कि एक ज़िप हेडर के टीओसी को लिखने के समय में परिभाषित किया जाना है। हालांकि, मैं गलत हो सकता था।

2

यह और अधिक काम की तुलना में आप अल्पावधि में से निपटने के लिए देख रहे हैं हो सकता है, लेकिन मैं लंबे समय में संदेह है कि यह बहुत फायदेमंद आप Ant (या Maven, या यहाँ तक Bazel) का उपयोग करने पर विचार करने के लिए किया जाएगा बजाय जार मैन्युअल रूप से निर्माण करने के लिए। इस तरह आप केवल चींटी फ़ाइल (यदि आप ग्रहण का उपयोग करते हैं) पर क्लिक कर सकते हैं और जार का पुनर्निर्माण कर सकते हैं।

वैकल्पिक रूप से, आप वास्तव में जार में इन कॉन्फ़िगरेशन फ़ाइलों को नहीं रखना चाहते हैं - अगर आपको नियमित रूप से इन फ़ाइलों को प्रतिस्थापित करने की आवश्यकता है, या यदि इसे एकाधिक पार्टियों में वितरित किया जाना है, तो कॉन्फ़िगरेशन फ़ाइल चाहिए जार का हिस्सा न बनें।

+2

सहमत हुए। हालांकि, आप JAR में "डिफ़ॉल्ट" कॉन्फ़िगरेशन फ़ाइल डालना चाहते हैं, इसलिए यदि बाहरी (कुछ दूषित, हटाया गया, आदि) से कुछ होता है, तो आप डिफ़ॉल्ट कॉन्फ़िगरेशन पर वापस आ सकते हैं। –

+0

सच है - हालांकि मुझे नहीं पता कि उनके कॉन्फ़िगरेशन फ़ाइलों के बिना कितने एप्लिकेशन काम करना जारी रखेंगे ... – dimo414

7

जैसा कि कई ने कहा है, आप जार को बिना किसी जार के एक जार में फ़ाइल नहीं बदल सकते हैं। लॉन्च 4 जे के साथ यह भी बदतर है, एक बार जब आप जार बदलते हैं तो आपको EXE का पुनर्निर्माण करना होगा। तो इस मार्ग पर मत जाओ।

सामान्य रूप से JAR में कॉन्फ़िगरेशन फ़ाइलों को रखना बुरा विचार है। मेरा सुझाव यहाँ है। कुछ पूर्व निर्धारित स्थानों (जैसे होम निर्देशिका, \ प्रोग्राम फ़ाइलें \ आदि) में अपनी कॉन्फ़िगरेशन फ़ाइल खोजें। अगर आपको कॉन्फ़िगरेशन फ़ाइल मिलती है, तो इसका इस्तेमाल करें। अन्यथा, जार में फॉलबैक के रूप में उपयोग करें। यदि आप ऐसा करते हैं, तो आपको केवल पूर्व-निर्धारित स्थान में कॉन्फ़िगरेशन फ़ाइल लिखनी होगी और प्रोग्राम इसे उठाएगा।

इस दृष्टिकोण का एक अन्य लाभ यह है कि यदि आप अपने सॉफ़्टवेयर को अपग्रेड करते हैं तो संशोधित कॉन्फ़िगरेशन फ़ाइल ओवरराइट नहीं होती है।

1

हाँ तुम, SQLite का उपयोग कर आप से पढ़ सकते हैं कर सकते हैं या जार फ़ाइल के भीतर से एक डेटाबेस के लिए लिखते हैं, ताकि आप निकालने और फिर नहीं होगा फिर से जार यह, का उपयोग करते हुए अपनी पोस्ट http://shoaibinamdar.in/blog/?p=313

का पालन करें वाक्यविन्यास "jdbc: sqlite :: संसाधन:" आप जार फ़ाइल

+1

हाय, स्टैक ओवरफ्लो में आपका स्वागत है। मैंने आपकी पोस्ट से संक्षेप हटा दिए हैं। सामान्य पाठ संदेश शैली शॉर्टेंड में यहां उचित नहीं है। मुझे लगता है कि यह जवाब प्रश्न का एक अच्छा जवाब होगा यदि आपने अपने ब्लॉग से कुछ और विवरण शामिल किए हैं, तो जवाब में ही ताकि कोई आपके उत्तर को पढ़ने वाला कुछ सीख सके, भले ही वे ब्लॉग नहीं पढ़ते हैं, या यह स्थानांतरित हो जाता है कुछ भविष्य की तारीख पर एक और यूआरएल के लिए। – Flexo

1

के भीतर से डेटाबेस को पढ़ने और लिखने में सक्षम होंगे TrueZip देखें।

वर्चुअल फ़ाइल सिस्टम एपीआई के माध्यम से, यह वही करता है जो आप चाहते हैं (एक जार फ़ाइल के अंदर फ़ाइलों को इनलाइन संपादित करने के लिए)। यह नेस्टेड अभिलेखागार (एक जार के अंदर जार) का भी समर्थन करता है। "संग्रह एक फ़ाइल ओवरराइट किया जाएगा जोड़ा जा रहा है के रूप में ही पथ नाम होने में पहले से ही कोई भी फ़ाइल।"

jar uf jar-file input-file(s) 

:

1

पूर्व के लिए जार फ़ाइल निकालें। Winrar के साथ और उपयोग CAVAJ:

कैवाज जावा डीकंपलर एक ग्राफिकल फ्रीवेयर उपयोगिता है जो क्लास फ़ाइलों से जावा स्रोत कोड का पुनर्निर्माण करता है।

यहाँ अगर आप की जरूरत वीडियो ट्यूटोरियल है: https://www.youtube.com/watch?v=ByLUeem7680

+0

अच्छी तरह से है, "CAVAJ का उपयोग करें" सॉफ़्टवेयर यहां जवाब है। यदि कोई अतिरिक्त व्याख्या की आवश्यकता है तो लिंक सिर्फ अतिरिक्त है। – Tomasz

1

सुनिश्चित नहीं हैं कि इस मदद करता है, तो है, लेकिन आप निकालने के बिना संपादित कर सकते हैं:

  1. से खोलें जार फ़ाइल vi संपादक
  2. का चयन करें फ़ाइल जिसे आप सूची से संपादित करना चाहते हैं
  3. फ़ाइल खोलने के लिए एंटर दबाएं चेंजर्स को करें और इसे सहेजें सुंदर सरल

चेक अधिक जानकारी के http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html

7

आप विम का उपयोग कर सकते के लिए ब्लॉग पोस्ट:

vim my.jar

विम दिया आप अपने वातावरण में unzip है, संकुचित पाठ फ़ाइलों को संपादित करने में सक्षम है।

+2

यह बहुत अच्छा है। उस फ़ाइल पर नेविगेट करें जिसे आप ढूंढ रहे हैं और एंटर दबाएं। फ़ाइल संपादित करें, फिर टाइप करें: wq को बचाने के लिए! –

+0

यह मुझे अनफॉर्मेटेड फ़ाइल देता है –

0

सबसे आसान तरीका मैं Windows में ऐसा करने के लिए मिल गया है WinRAR साथ है:

  1. फाइल पर राइट क्लिक करें और चुनें संदर्भ मेनू से "WinRAR साथ खोलें"।
  2. संपादित करने के लिए फ़ाइल पर नेविगेट करें और इसे डिफ़ॉल्ट संपादक में खोलने के लिए डबल-क्लिक करें।
  3. परिवर्तन करने के बाद, संपादक को सहेजें और बाहर निकलें।
  4. एक संवाद तब प्रकट होगा जब आप संग्रह में फ़ाइल को अपडेट करना चाहते हैं - "हां" चुनें और JAR अपडेट किया जाएगा।