जावा का उपयोग कर बहु-भाग ज़िप फ़ाइल वॉल्यूम्स को अनजिप करना

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

उदाहरण के लिए यदि आपके पास 2.5 एमबी ज़िप फ़ाइल है और आपका मेल सिस्टम केवल 1 एमबी फाइलों का समर्थन करता है, तो आप ज़िप को अधिकतम 1 एमबी की 3 फाइलें बनाने के लिए कह सकते हैं।

तो यह a.zip.001, a.zip.002, a.zip.003 बनाता है ... विभिन्न पुस्तकालयों ने उन्हें अलग-अलग नाम दिया लेकिन अनिवार्य रूप से वे सभी एक ही तरीके से काम करते हैं।

आप जावा में इसे कैसे अनजिप करते हैं? यह एसडीडी में संपीड़न libs की तरह दिखता है यह समर्थन करता है।

धन्यवाद।

0
जोड़ा संपादित
विचारों: 1
ज़िप फ़ाइल को भागों में कैसे टूटा गया था?
जोड़ा लेखक Puce, स्रोत
मैंने चिल्काट की कोशिश की जिसमें बहुत सी विशेषताएं हैं लेकिन यह बहु-फ़ाइल अभिलेखागार का समर्थन नहीं करती है। इस बिंदु पर टोडो सूची पर भी नहीं।
जोड़ा लेखक awm, स्रोत
जोड़ा लेखक Emmanuel Bourg, स्रोत

1 उत्तर

सभी फ़ाइलों को एक फ़ाइल में संयोजित करने का प्रयास करें और फिर एकल फ़ाइल निकालें। कुछ इस तरह:

    File dir = new File("D:/arc");
    FileOutputStream fos = new FileOutputStream(new File(
            "d:/arc/archieve-full.zip"));
    FileInputStream fis = null;
        Set files = new TreeSet();
        for (String fname : dir.list()) {
            files.add(fname);
        }
        for (String fname : files) {
        try {
            fis = new FileInputStream(new File(dir.getAbsolutePath(), fname));
            byte[] b = new byte[fis.available()];
            fis.read(b);
            fos.write(b);
        } finally {
            if (fis != null) {
                fis.close();
            }
            fos.flush();
        }
    }
    fos.close();
    ZipFile zipFile = new ZipFile("d:/arc/archieve-full.zip");
    /*extract files from zip*/

अद्यतन: फ़ाइल नामों को सॉर्ट करने के लिए TreeSet का उपयोग किया गया है, क्योंकि dir.list() वर्णमाला क्रम की गारंटी नहीं देता है।

0
जोड़ा
यदि आप जावा एसई 7 का उपयोग कर रहे हैं, तो मैं स्ट्रीम को मैन्युअल रूप से बंद करने के बजाय एआरएम (कोशिश करें (...) {}) का उपयोग करने की सलाह देता हूं।
जोड़ा लेखक Puce, स्रोत
हालांकि बिल्कुल वही कोड नहीं है, मैंने कोशिश की और यह टूट गया। कंसेटेटिंग ज़िप को तोड़ने लगता है। मैं "सोचता हूं" प्रत्येक फ़ाइल का अपना हेडर होता है ताकि सिस्टम जानता है कि यह कौन सा भाग संख्या है जो स्ट्रीम का हिस्सा नहीं होना चाहिए।
जोड़ा लेखक awm, स्रोत
@awm मैंने 7 ज़िप का उपयोग करके संकुचित ज़िप के साथ कोशिश की और यह ठीक काम किया। सुनिश्चित करें कि आपके द्वारा उपयोग किए जाने वाले फ़ोल्डर में केवल ज़िप फ़ाइलें हैं। फ़ाइलों के क्रम में एक समस्या थी, लेकिन मैंने इसे इस अद्यतन में ठीक किया।
जोड़ा लेखक tibtof, स्रोत