如何在Java中解压缩分割卷zip?

awm*_*awm 2 java zip

我需要重新组装一个100个部分的zip文件并提取内容.我尝试在输入流中简单地将zip卷连接在一起,但这不起作用.任何建议,将不胜感激.

谢谢.

szh*_*hem 6

这是您可以从中开始的代码.它从多卷zip存档中提取单个文件条目:

package org.test.zip;

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.SequenceInputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Main {

    public static void main(String[] args) throws IOException {
        ZipInputStream is = new ZipInputStream(new SequenceInputStream(Collections.enumeration(
            Arrays.asList(new FileInputStream("test.zip.001"), new FileInputStream("test.zip.002"), new FileInputStream("test.zip.003")))));
        try {
            for(ZipEntry entry = null; (entry = is.getNextEntry()) != null; ) {
                OutputStream os = new BufferedOutputStream(new FileOutputStream(entry.getName()));
                try {
                    final int bufferSize = 1024;
                    byte[] buffer = new byte[bufferSize];
                    for(int readBytes = -1; (readBytes = is.read(buffer, 0, bufferSize)) > -1; ) {
                        os.write(buffer, 0, readBytes);
                    }
                    os.flush();
                } finally {
                    os.close();
                }
            }
        } finally {
            is.close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


awm*_*awm 5

只是一个注释,使其更具动态 - 100%基于下面的mijer代码.

    private void CombineFiles (String[] files) throws FileNotFoundException, IOException {
    Vector<FileInputStream> v = new Vector<FileInputStream>(files.length);
    for (int x = 0; x < files.length; x++)
        v.add(new FileInputStream(inputDirectory + files[x]));

    Enumeration<FileInputStream> e = v.elements();

    SequenceInputStream sequenceInputStream = new SequenceInputStream(e);

    ZipInputStream is = new ZipInputStream(sequenceInputStream);
    try {
        for (ZipEntry entry = null; (entry = is.getNextEntry()) != null;) {
            OutputStream os = new BufferedOutputStream(new FileOutputStream(entry.getName()));
            try {
                final int bufferSize = 1024;
                byte[] buffer = new byte[bufferSize];
                for (int readBytes = -1; (readBytes = is.read(buffer, 0, bufferSize)) > -1;) {
                    os.write(buffer, 0, readBytes);
                }
                os.flush();
            } finally {
                os.close();
            }
        }
    } finally {
        is.close();
    }

}
Run Code Online (Sandbox Code Playgroud)