एक जार के अंदर एक फ़ाइल को संशोधित करना


87

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

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

मेरे द्वारा jarring नहीं करने का कारण यह है कि यदि मैं इसे फिर से .exe फ़ाइल नहीं बना सकता, तो एप्लिकेशन को लॉन्च 4j के साथ लपेटा जाता है।


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

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

क्या आप वर्तमान स्वीकृत उत्तर को अस्वीकार कर सकते हैं? यह एक नकारात्मक स्कोर है और पूरी तरह से उपयोगी नहीं है
Dici

जवाबों:


83

आप के लिए uविकल्प का उपयोग कर सकते हैंjar

जावा ट्यूटोरियल से:

jar uf jar-file input-file(s)

"संग्रह में पहले से मौजूद कोई भी फ़ाइल नाम के समान पथनाम वाली फ़ाइल अधिलेखित कर दी जाएगी।"

एक JAR फ़ाइल अद्यतन करना देखें ।

पूरे जार को फिर से बनाने से बहुत बेहतर है। अपने कार्यक्रम के भीतर से यह आह्वान संभव भी लगता है। जावा में रनिंग कमांड लाइन का प्रयास करें


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

26

आप विम का उपयोग कर सकते हैं:

vim my.jar

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


3
यह भी खूब रही। उस फ़ाइल पर नेविगेट करें जिसे आप खोज रहे हैं और Enter दबाएं। फ़ाइल संपादित करें, फिर टाइप करें: बचाने के लिए wq!
माइकल बटलर

इसके अलावा, आपको zipअपने वातावरण में बदलावों को बचाने में सक्षम होना चाहिए। जवाब के लिए धन्यवाद!
ट्रिक

11

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


8

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

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

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


4

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

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

अधिक जानकारी के लिए ब्लॉग पोस्ट की जाँच करें http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html


2

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

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


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

यह सच है - यद्यपि मुझे नहीं पता कि कितने अनुप्रयोग अपने विन्यास फाइल के बिना कार्य करना जारी रखेंगे ...
dimo414

1

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

संपादित करें

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


1

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

सिंटैक्स "jdbc: sqlite :: resource:" का उपयोग करते हुए आप जार फ़ाइल के डेटाबेस से पढ़ने और लिखने में सक्षम होंगे


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

1

की जाँच करें TrueZip

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


1

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

कैवाज जावा डेकोम्पेलर एक ग्राफिकल फ्रीवेयर यूटिलिटी है जो CLASS फाइलों से जावा सोर्स कोड को फिर से बनाता है।

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


ठीक है, "CAVAJ का उपयोग करें" सॉफ्टवेयर यहां उत्तर है। यदि लिंक किसी अतिरिक्त स्पष्टीकरण की आवश्यकता है तो लिंक इसके अतिरिक्त है।
टॉमाज़ मूलार्क

0

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


और कैसे, बिना निकाले और री-जारिंग?
user85421

0

विंडोज में ऐसा करने का सबसे सरल तरीका WinRAR के साथ है :

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

0

ऊपर दिए गए अधिकांश उत्तर यह कहते हैं कि आप इसे क्लास फाइल के लिए नहीं कर सकते।

अगर आप क्लास फाइल अपडेट करना चाहते हैं तो भी आप ऐसा कर सकते हैं। आपको बस इतना करना है कि जार में अपने कार्यक्षेत्र से वर्ग फ़ाइल को खींचें और छोड़ें।

यदि आप कक्षा फ़ाइल में अपने परिवर्तनों को सत्यापित करना चाहते हैं, तो आप इसे jd-gui जैसे डिकम्पॉइलर का उपयोग करके कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.