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,避免解碼錯誤out.setLevel(Deflater.BEST_COMPRESSION))zip(File src, File dest) 等便捷方法此示例代碼簡潔且解決了中文路徑的常見痛點,是構建類 WinZip 工具的良好起點。