java - 从多个 zip 文件中读取数据并将它们合并为一个

标签 java file zip inputstream fileoutputstream

我想从 4 个名为 zip1、zip2、zip3、zip4 的 zip 文件中读取数据。所有这些 zip 文件都是从这个名为“BigZip”的 1 个大 zip 文件中拆分出来的。我想将 zip 文件合并为一个,然后比较字节,如果 1 bigzip 文件的字节大小与组合的 zip 文件 (zip1+zip2+zip3+zip4) 匹配。当我组合 4 个 zip 文件的大小时,我得到的文件非常小。我做错了什么?

这是我的代码:

targetFilePath1、targetFilePath2、targetFilePath3、targetFilePath4属于4个zip文件的路径。 sourceFilePath 是 BigZip 文件的路径

class Test {


public static void main(String args[]) {

ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(sourceBigZip));

            readZip(sourceFilePath, targetFilePath1);
            readZip(sourceFilePath, targetFilePath2);
            readZip(sourceFilePath, targetFilePath3);
            readZip(sourceFilePath, targetFilePath4);
  outStream.close();
}

static void readZip(String sourceBigZip, String targetFile) throws Exception {
    ZipInputStream inStream = new ZipInputStream(new FileInputStream(targetFile));
    byte[] buffer = new byte[1024];
    int len = inStream.read(buffer);
    while (len != -1) {
        outStream.write(buffer, 0, len);
        len = inStream.read(buffer);
        System.out.print(len);
    }

    inStream.close();
}
}

最佳答案

创建一次 ZipOutputStream 并将其传递给 readZip() 方法,例如:

public static void main(String args[]) {
    ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(sourceFilePath));
    readZip(outStream , targetFilePath1);
    readZip(outStream , targetFilePath2);
    readZip(outStream , targetFilePath3);
    readZip(outStream , targetFilePath4);
}

那么在处理将数据从一个 zip 复制到另一个 zip 时出现错误... 您需要像这样复制 zip 文件中的每个文件:

static void readZip(ZipOutputStream outStream, String targetFile)
        throws Exception {
    ZipInputStream inStream = new ZipInputStream(new FileInputStream(
            targetFile));
    byte[] buffer = new byte[1024];
    int len = 0;

    for (ZipEntry e; (e = inStream.getNextEntry()) != null;) {
        outStream.putNextEntry(e);
        while ((len = inStream.read(buffer)) > 0) {
            outStream.write(buffer, 0, len);
        }
    }
    inStream.close();
}

关于java - 从多个 zip 文件中读取数据并将它们合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27321825/

相关文章:

php - 使用 PHP 创建自解压可执行文件

ruby-on-rails - rails : on-the-fly streaming of output in zip format?

java - 为 Box 类创建测试驱动程序并测试其所有方法

java - 使用 Java 扫描器从文本文件读取长类型时遇到问题

java - 配置Hibernate和Spring的数据库开发环境

C - chmod() 不改变权限

java - 使用 Intellij 版本 14 的 Android - 仅更新当前 XML 资源文件中的 XML 引用

Java ImageIO.read(文件与 URL)

c++ - 换行符后停止读取文件

bash - bash 中的 zip 文件夹