迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 中的 Zip 文件

作者:迹忆客 最近更新:2023/05/15 浏览次数:

一个 zip 文件可以由一个文件、多个文件甚至一个文件夹组成。 有多种创建 zip 文件的方法。

本篇文章介绍了使用 Java 创建 zip 文件的不同示例。


使用 Java.Util.Zip 在 Java 中压缩单个文件

我们可以使用 java.util.zip.ZipOutputStream 类在 Java 中压缩单个文件。 请参见下面的示例:

package jiyik;

import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Create_Zip {

    public static void main(String[] args) {

        Path Source_File = Paths.get("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\jiyik1.txt");
        String Output_Zip = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\NewZip.zip";

        try {
            Create_Zip.Create_Zip_File(Source_File, Output_Zip);
            System.out.println("Zip File Created");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // method to zip a single file
    public static void Create_Zip_File(Path Source_File, String Output_Zip)
        throws IOException {

        if (!Files.isRegularFile(Source_File)) {
            System.err.println("File Not Found.");
            return;
        }

        try (
            ZipOutputStream Zip_Output_Stream = new ZipOutputStream(
                new FileOutputStream(Output_Zip));
            FileInputStream File_Input_Stream = new FileInputStream(Source_File.toFile());
        ) {

            ZipEntry Zip_Entry = new ZipEntry(Source_File.getFileName().toString());
            Zip_Output_Stream.putNextEntry(Zip_Entry);

            byte[] Buffer = new byte[1024];
            int Length;
            while ((Length = File_Input_Stream.read(Buffer)) > 0) {
                Zip_Output_Stream.write(Buffer, 0, Length);
            }
            Zip_Output_Stream.closeEntry();
        }
    }
}

上面的代码将创建一个仅包含单个文件 jiyik1 的 zip 文件。

输出:

Zip File Created

Single File


使用 Java.Util.Zip 在 Java 中压缩多个文件

同样,我们可以使用 java.util.zip.ZipOutputStream 将多个文件添加到一个 zip 文件中。 多个文件被一个一个地添加到 zip 文件中。

请参阅以下示例:

package jiyik;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Create_Zip {
    public static void main(String[] args) {
        try {
            //The Source file paths
            String Source_File1 = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\jiyik1.txt";
            String Source_File2 = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\\\jiyik2.txt";
            //Output Zipped file path
            String Output_Zip_Path = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\NewZip.zip";

            File Output_Zip = new File(Output_Zip_Path);
            FileOutputStream File_Output_Stream  = new FileOutputStream( Output_Zip);
            ZipOutputStream Zip_Output_Stream = new ZipOutputStream(File_Output_Stream);

            Create_Zip_File(Source_File1, Zip_Output_Stream);
            Create_Zip_File(Source_File2, Zip_Output_Stream);
            Zip_Output_Stream.close();
            System.out.println("Zip File Created");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    // Method to create the zip file
    private static void Create_Zip_File(String Source_File, ZipOutputStream Zip_Output_Stream) throws IOException {
        final int BUFFER = 1024;
        BufferedInputStream Buffered_Input_Stream = null;
        try {
            File file = new File(Source_File);
            FileInputStream File_Input_Stream = new FileInputStream(file);
            Buffered_Input_Stream = new BufferedInputStream(File_Input_Stream, BUFFER);

            ZipEntry Zip_Entry = new ZipEntry(file.getName());
            Zip_Output_Stream.putNextEntry(Zip_Entry);
            byte Data[] = new byte[BUFFER];
            int Length;
            while((Length = Buffered_Input_Stream.read(Data, 0, BUFFER)) != -1) {
            Zip_Output_Stream.write(Data, 0, Length);
            }
        // close the entry
        Zip_Output_Stream.closeEntry();
        }
        finally {
            try {
                Buffered_Input_Stream.close();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

上面的代码会将多个文件添加到一个 zip 文件中。

输出:

Zip File Created

Multiple Files


使用 Java.Util.Zip 在 Java 中压缩文件夹

Java.Util.Zip 还可以压缩文件夹或目录,包括所有子文件夹和文件。 请参见下面的示例:

package jiyik;

import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Create_Zip {

    public static void main(String[] args) {

        Path Source_Folder = Paths.get("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\Folder");

        if (!Files.isDirectory(Source_Folder)) {
            System.out.println("Please provide the right folder.");
            return;
        }

        try {
            Create_Zip.Create_Zip_Folder(Source_Folder);
            System.out.println("Folder is zipped");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // zip a directory or folder
    public static void Create_Zip_Folder(Path Source_Folder) throws IOException {

        // get folder name as zip file name
        String Output_Zip = Source_Folder.getFileName().toString() + ".zip";

        try (
                ZipOutputStream Zip_Output_Stream = new ZipOutputStream(
                        new FileOutputStream(Output_Zip))
        ) {
            Files.walkFileTree(Source_Folder, new SimpleFileVisitor<>() {
                @Override
                public FileVisitResult visitFile(Path File,
                    BasicFileAttributes File_Attributes) {

                    // only copy files
                    if (File_Attributes.isSymbolicLink()) {
                        return FileVisitResult.CONTINUE;
                    }

                    try (FileInputStream File_Input_Stream = new FileInputStream(File.toFile())) {

                        Path targetFile = Source_Folder.relativize(File);
                        Zip_Output_Stream.putNextEntry(new ZipEntry(targetFile.toString()));

                        byte[] BUFFER = new byte[1024];
                        int Length;
                        while ((Length = File_Input_Stream.read(BUFFER)) > 0) {
                            Zip_Output_Stream.write(BUFFER, 0, Length);
                        }

                        Zip_Output_Stream.closeEntry();

                        System.out.printf("Zipped file : %s%n", File);

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFileFailed(Path File, IOException exception) {
                    System.err.printf("Unable to zip the file : %s%n%s%n", File, exception);
                    return FileVisitResult.CONTINUE;
                }
            });
        }
    }
}

上面的代码将压缩给定的文件夹。

输出:

Zipped file : C:\Users\Sheeraz\OneDrive\Desktop\ZipFiles\Folder\jiyik1.txt
Zipped file : C:\Users\Sheeraz\OneDrive\Desktop\ZipFiles\Folder\jiyik2.txt
Folder is zipped

Zip Folder

还有其他方法,如文件系统或 zip4j 可以压缩文件或文件夹。 但是,Java.Util.Zip 被认为是压缩文件和文件夹的最有效方式。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便