溫馨提示×

java如何壓縮多個文件夾

小億
81
2024-09-13 15:24:58
欄目: 編程語言

在Java中,可以使用java.util.zip包中的類和方法來壓縮多個文件夾。以下是一個示例代碼,演示了如何將多個文件夾壓縮成一個ZIP文件:

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

public class ZipMultipleFolders {
    public static void main(String[] args) {
        // 要壓縮的文件夾路徑列表
        String[] folderPaths = {"path/to/folder1", "path/to/folder2"};
        
        // 輸出的ZIP文件路徑
        String outputZipFilePath = "path/to/output.zip";
        
        try {
            zipMultipleFolders(folderPaths, outputZipFilePath);
        } catch (IOException e) {
            System.err.println("Error while zipping folders: " + e.getMessage());
        }
    }

    private static void zipMultipleFolders(String[] folderPaths, String outputZipFilePath) throws IOException {
        try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(outputZipFilePath))) {
            for (String folderPath : folderPaths) {
                Path folder = Paths.get(folderPath);
                Files.walkFileTree(folder, new SimpleFileVisitor<Path>() {
                    @Override
                    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                        // 獲取相對于壓縮根目錄的文件路徑
                        String relativePath = folder.relativize(file).toString();
                        // 創(chuàng)建ZIP條目并寫入文件數(shù)據(jù)
                        zipOut.putNextEntry(new ZipEntry(relativePath));
                        Files.copy(file, zipOut);
                        zipOut.closeEntry();
                        return FileVisitResult.CONTINUE;
                    }
                });
            }
        }
    }
}

這個示例代碼首先定義了要壓縮的文件夾路徑列表和輸出的ZIP文件路徑。然后,它調(diào)用zipMultipleFolders方法來執(zhí)行壓縮操作。

zipMultipleFolders方法接受兩個參數(shù):一個是要壓縮的文件夾路徑列表,另一個是輸出的ZIP文件路徑。方法內(nèi)部,我們創(chuàng)建一個ZipOutputStream實例,用于將文件寫入ZIP文件。

接下來,我們遍歷每個文件夾路徑,并使用Files.walkFileTree方法遍歷文件夾中的所有文件。對于每個文件,我們計算其相對于壓縮根目錄的路徑,并創(chuàng)建一個ZipEntry實例。然后,我們將文件數(shù)據(jù)寫入ZipOutputStream,并關(guān)閉當前ZIP條目。

最后,我們關(guān)閉ZipOutputStream,完成壓縮操作。

0