Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

JAVA zip 打包 不压缩


在 Java 中,你可以使用不同的方式进行 ZIP 打包而不进行压缩。下面我将介绍两种常见的实现方式,包括使用 Java 标准库和使用第三方库。对于每种方式,我将提供步骤流程以及示例代码,并列出相关的 Maven 和 Gradle 依赖坐标。

使用 Java 标准库

Java 的 java.util.zip 包提供了创建 ZIP 文件的功能。这种方式下,你可以创建一个不包含压缩的 ZIP 文件。

步骤流程:

  1. 创建一个输出 ZIP 文件的流。
  2. 使用 ZipOutputStream 将文件添加到 ZIP 文件中,但不进行压缩。
  3. 关闭 ZipOutputStream 以完成 ZIP 文件的创建。

示例代码:

import java.io.*;
import java.util.zip.*;

public class UncompressedZipExample {

    public static void main(String[] args) {
        String sourceFolderPath = "path/to/source/folder";
        String zipFilePath = "path/to/output/file.zip";

        try (FileOutputStream fos = new FileOutputStream(zipFilePath);
             ZipOutputStream zipOut = new ZipOutputStream(fos)) {

            File sourceFolder = new File(sourceFolderPath);
            addFolderToZip(sourceFolder, sourceFolder.getName(), zipOut);

            System.out.println("Uncompressed ZIP file created successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void addFolderToZip(File folder, String parentFolderName, ZipOutputStream zipOut) throws IOException {
        File[] files = folder.listFiles();

        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    addFolderToZip(file, parentFolderName + "/" + file.getName(), zipOut);
                } else {
                    FileInputStream fis = new FileInputStream(file);
                    ZipEntry zipEntry = new ZipEntry(parentFolderName + "/" + file.getName());
                    zipOut.putNextEntry(zipEntry);

                    byte[] bytes = new byte[1024];
                    int length;
                    while ((length = fis.read(bytes)) >= 0) {
                        zipOut.write(bytes, 0, length);
                    }

                    fis.close();
                }
            }
        }
    }
}

Maven 依赖:

这种方式不需要额外的依赖。

使用第三方库 - Apache Commons Compress

Apache Commons Compress 库提供了更高级的 ZIP 操作功能,允许你创建未压缩的 ZIP 文件。

步骤流程:

  1. 添加 Apache Commons Compress 库的依赖。
  2. 创建一个输出 ZIP 文件的流。
  3. 使用 org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream 将文件添加到 ZIP 文件中,但不进行压缩。
  4. 关闭 ZipArchiveOutputStream 以完成 ZIP 文件的创建。

示例代码:

import org.apache.commons.compress.archivers.zip.*;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;
import java.nio.file.Paths;

public class UncompressedZipCommonsCompressExample {

    public static void main(String[] args) {
        String sourceFolderPath = "path/to/source/folder";
        String zipFilePath = "path/to/output/file.zip";

        try (OutputStream fos = new FileOutputStream(zipFilePath);
             ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(fos)) {

            File sourceFolder = new File(sourceFolderPath);
            addFolderToZip(sourceFolder, sourceFolder.getName(), zipOut);

            System.out.println("Uncompressed ZIP file created successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void addFolderToZip(File folder, String parentFolderName, ZipArchiveOutputStream zipOut) throws IOException {
        File[] files = folder.listFiles();

        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    addFolderToZip(file, Paths.get(parentFolderName, file.getName()).toString(), zipOut);
                } else {
                    try (FileInputStream fis = new FileInputStream(file)) {
                        ZipArchiveEntry zipEntry = new ZipArchiveEntry(Paths.get(parentFolderName, file.getName()).toString());
                        zipOut.putArchiveEntry(zipEntry);
                        IOUtils.copy(fis, zipOut);
                        zipOut.closeArchiveEntry();
                    }
                }
            }
        }
    }
}

Maven 依赖:

在你的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

Gradle 依赖:

在你的 build.gradle 文件中添加以下依赖:

dependencies {
    implementation 'org.apache.commons:commons-compress:1.21'
}

这两种方式都可以用来创建不进行压缩的 ZIP 文件,选择其中之一根据你的项目需求和偏好进行使用。

示例代码:###方法二:使用ApacheCommonsCompress库步骤流程:1.创建一个ArchiveOutputStream对象(Z ...
注意:为了演示目的,以下示例代码可能需要进行适当的错误处理和异常处理,以确保代码的健壮性。示例代码:###使用ApacheCommonsCo ...
关闭`ZipOutputStream`和所有的`FileInputStream`对象。示例代码:###使用ApacheCommonsComp ...
下面我将介绍两种常用的方式:使用Java内置库和使用第三方库ApacheCommonsCompress。对于每个文件,创建一个新的`ZipE ...
下面我将介绍几种常用的实现方式,包括使用Java标准库以及一些流行的第三方库。使用`ZipArchiveOutputStream`来创建ZI ...