2011-08-20 13 views
8

किसी तृतीय पक्ष लाइब्रेरी का उपयोग किए बिना सीधे एक ज़िप संग्रह पर JAXB का उपयोग कर XML फ़ाइलों की सूची लिखने का उचित तरीका क्या है।मैं XML फ़ाइलों को सीधे ज़िप संग्रह में कैसे लिखूं?

क्या सभी XML फ़ाइलों को निर्देशिका में लिखना बेहतर होगा और फिर ज़िप करें?

+0

आप JAXB का उपयोग करके एक XML फ़ाइल क्यों लिखेंगे? आप ज़िप को सीधे –

+0

पर कॉपी क्यों नहीं करेंगे ज़िप इसे संपीड़ित करने के बजाय सबकुछ संग्रहित करने के लिए अधिक है। यद्यपि यह संपादक वास्तव में फ़ाइलों को संभालता है, मुझे एक समाधान की आवश्यकता होती है जिसने मुझे त्वरित परिवर्तनों के लिए संपादक के बाहर फ़ाइलों को बदलने की अनुमति दी। – kdgwill

उत्तर

10

जैसा कि अन्य ने इंगित किया है, आप ज़िप फ़ाइल बनाने के लिए ZipOutputStream कक्षा का उपयोग कर सकते हैं। ZipOutputStream में जेएक्सबी एक्सएमएल डेटा लिखने (marshalling) लिखने से पहले ZipEntry डिस्क्रिप्टर का उपयोग करने के लिए एक ही ज़िप फ़ाइल में एकाधिक फ़ाइलों को रखने की चाल है। तो आपका कोड इस जैसा दिख सकता है:


JAXBElement jaxbElement1 = objectFactory.createRoot(rootType); 
JAXBElement jaxbElement2 = objectFactory.createRoot(rootType); 

ZipOutputStream zos = null; 
try { 
    zos = new ZipOutputStream(new FileOutputStream("xml-file.zip")); 
    // add zip-entry descriptor 
    ZipEntry ze1 = new ZipEntry("xml-file-1.xml"); 
    zos.putNextEntry(ze1); 
    // add zip-entry data 
    marshaller.marshal(jaxbElement1, zos); 
    ZipEntry ze2 = new ZipEntry("xml-file-2.xml"); 
    zos.putNextEntry(ze2); 
    marshaller.marshal(jaxbElement2, zos); 
    zos.flush(); 
} finally { 
    if (zos != null) { 
    zos.close(); 
    } 
} 
1

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

ऐसा करने के लिए, ZipOututStream खोलें और प्रविष्टियों को बनाने के लिए API का उपयोग करें, फिर प्रत्येक प्रविष्टि में सामग्री लिखें। याद रखें कि एक ज़िप संग्रह संग्रह के भीतर नामित फ़ाइलों की एक श्रृंखला की तरह है।

btw, ZipOututStream JDK का हिस्सा (यानी यह नहीं एक "पुस्तकालय")

3

एक 3 पार्टी पुस्तकालय — का उपयोग कर java.util.zip.ZipOutputStream उपयोग करने के लिए किया जाएगा बिना "उचित" जिस तरह से — है।

व्यक्तिगत रूप से, हालांकि, मैं TrueZip पसंद करता हूं।

ट्रूजिप वर्चुअल फाइल सिस्टम (वीएफएस) के लिए जावा आधारित प्लग-इन फ्रेमवर्क है जो संग्रह फ़ाइलों को पारदर्शी पहुंच प्रदान करता है जैसे कि वे केवल सादे निर्देशिकाएं हैं।

+0

+1 वही उत्तर + TrueZip टिप :) – Bohemian

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