Java 对文件夹打包并下载

在 Java 开发中,我们经常需要对文件夹进行打包,并通过网络下载。这种场景在 Web 应用程序中非常常见,比如将用户上传的文件夹打包成 zip 文件后提供下载。

本文将向您介绍如何使用 Java 实现对文件夹的打包,并提供下载功能。我们将使用 Java 提供的 java.util.zip 包来处理文件的压缩和解压缩操作。同时,我们还将使用 Java 提供的 java.net 包来实现文件下载的功能。

文件夹打包

我们首先来了解如何将一个文件夹打包成 zip 文件。

在 Java 中,我们可以使用 java.util.zip 包中的 ZipOutputStream 和 ZipEntry 类来实现文件夹压缩功能。下面是一个简单的示例代码:

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

public class ZipFolder {
    public static void main(String[] args) {
        String sourceFolder = "path/to/source/folder";
        String targetZipFile = "path/to/target/zip/file.zip";

        try {
            FileOutputStream fos = new FileOutputStream(targetZipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);

            zipFolder(sourceFolder, zos);

            zos.close();
            fos.close();

            System.out.println("Folder successfully compressed to " + targetZipFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void zipFolder(String sourceFolder, ZipOutputStream zos) throws IOException {
        File folder = new File(sourceFolder);
        File[] files = folder.listFiles();

        for (File file : files) {
            if (file.isDirectory()) {
                zipFolder(file.getAbsolutePath(), zos);
            } else {
                byte[] buffer = new byte[1024];
                FileInputStream fis = new FileInputStream(file);
                zos.putNextEntry(new ZipEntry(file.getName()));

                int length;
                while ((length = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, length);
                }

                fis.close();
            }
        }
    }
}

在上述代码中,我们首先定义了源文件夹路径和目标 zip 文件路径。然后,我们创建了一个 FileOutputStream 对象和一个 ZipOutputStream 对象,并将 FileOutputStream 对象传递给 ZipOutputStream 对象。

接下来,我们调用 zipFolder 方法来递归地打包文件夹。在 zipFolder 方法中,我们首先获取文件夹中的所有文件和子文件夹。如果是文件夹,则递归调用 zipFolder 方法;如果是文件,则将其添加到 ZipOutputStream 对象中。

最后,我们关闭 ZipOutputStream 和 FileOutputStream 对象,并打印出打包成功的消息。

文件夹下载

接下来,我们将学习如何通过网络提供文件夹下载功能。

在 Java 中,我们可以使用 java.net 包中的 HttpURLConnection 类来实现文件下载功能。下面是一个简单的示例代码:

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class DownloadFolder {
    public static void main(String[] args) {
        String sourceFolder = "path/to/source/folder";
        String targetZipFile = "path/to/target/zip/file.zip";

        try {
            URL url = new URL("
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            InputStream inputStream = connection.getInputStream();
            FileOutputStream outputStream = new FileOutputStream(targetZipFile);

            byte[] buffer = new byte[1024];
            int length;

            while ((length = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, length);
            }

            outputStream.close();
            inputStream.close();

            System.out.println("Folder successfully downloaded to " + targetZipFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们首先定义了源文件夹路径和目标 zip 文件路径。然后,我们创建一个 URL 对象,并打开一个 HttpURLConnection 连接。

我们设定请求方法为 GET,并获取连接的输入流和输出流。然后,我们将输入流中的数据写入到输出流中,实现文件的下载功能。

最后,我们关闭输入流和输出流,并打印出下载成功的消息。

完整示例

下面是一个完整的示例代码,演示了如何将文件夹打包并通过网络下载:

import java.io.*;
import java.util.zip.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class ZipAndDownloadFolder {
    public static void main(String[] args) {
        String sourceFolder = "path/to/source/folder";
        String targetZipFile = "path/to/target/zip/file.zip";

        // 打包文件夹
        try