首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java ZIP 文件壓縮實現與中文文件名編碼解決方案:ZipOutputStream 與 ISO8859_1 實戰

     編輯:Java 相關知識

核心壓縮代碼

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

public class ZipUtil {
    public static void main(String[] args) {
        try {
            // 關鍵:指定 ISO8859_1 讀取源文件,解決中文路徑問題
            BufferedReader in = new BufferedReader(
                new InputStreamReader(new FileInputStream(args[0]), "ISO8859_1"));

            FileOutputStream fos = new FileOutputStream(args[1] + ".zip");
            CheckedOutputStream cos = new CheckedOutputStream(fos, new CRC32());
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cos));

            out.putNextEntry(new ZipEntry(args[0])); // 條目名使用原文件名

            int c;
            while ((c = in.read()) != -1) {
                out.write(c);
            }

            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

中文編碼處理說明

  • 問題根源:默認字符集讀取中文路徑會產生亂碼,導致壓縮包內文件名錯誤
  • 解決方案:構建 InputStreamReader 時顯式指定 ISO8859_1,該編碼將字節直接映射為 Unicode 碼位 0-255,避免解碼錯誤
  • 適用場景:源文件路徑包含中文,且目標 ZIP 工具支持 ISO8859_1 解碼(如 WinRAR、7-Zip 默認兼容)

擴展方向

  • 遞歸遍歷目錄,支持多文件/文件夾壓縮
  • 添加壓縮級別設置 (out.setLevel(Deflater.BEST_COMPRESSION))
  • 實現分卷壓縮、加密、註釋等高級功能
  • 封裝為可復用工具類,提供 zip(File src, File dest) 等便捷方法

此示例代碼簡潔且解決了中文路徑的常見痛點,是構建類 WinZip 工具的良好起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved