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

Java壓縮檔案目錄為ZIP:解決中文檔名亂碼的最佳實踐

     編輯:Java 程式設計入門

標準庫的缺陷

Java內建java.util.zip處理壓縮雖方便,但不支援中文檔名/目錄名,遇到中文即打包失敗,這是許多開發者踩過的坑。

Ant庫完美解決中文問題

經實測,Apache Ant庫中的org.apache.tools.zip套件完美支援中文路徑。取得途徑多樣:應用伺服器通常內建,或從Tomcat 5.x的ant.jar提取均可使用。

完整實作範例

import java.io.*;
import org.apache.tools.zip.ZipOutputStream;
import org.apache.tools.zip.ZipEntry;

public class CompressBook {
    public void zip(String inputFileName) throws Exception {
        String zipFileName = "c:/test.zip";
        zip(zipFileName, new File(inputFileName));
    }

    private void zip(String zipFileName, File inputFile) throws Exception {
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
        zip(out, inputFile, "");
        System.out.println("zip done");
        out.close();
    }

    private void zip(ZipOutputStream out, File f, String base) throws Exception {
        if (f.isDirectory()) {
            File[] fl = f.listFiles();
            out.putNextEntry(new ZipEntry(base + "/"));
            base = base.isEmpty() ? "" : base + "/";
            for (File file : fl) {
                zip(out, file, base + file.getName());
            }
        } else {
            out.putNextEntry(new ZipEntry(base));
            try (FileInputStream in = new FileInputStream(f)) {
                byte[] buffer = new byte[1024];
                int len;
                while ((len = in.read(buffer)) > 0) {
                    out.write(buffer, 0, len);
                }
            }
        }
    }
}

關鍵改進點:使用緩衝陣列批次讀寫替代逐位元組操作,大幅提升效能;ZipEntry路徑處理更健壯。

遺憾與展望

無論java.util.zip或org.apache.tools.zip均無法解壓RAR格式。Java生態圈缺乏原生RAR解壓庫,期待高手分享解決方案。目前建議:伺服器端可呼叫系統unrar指令,或使用第三方商業庫。

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