import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; 改为 import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream;
ant包里提供ZipOutputStream类的setEncoding("gbk")方法。
zos.setEncoding("gbk");
ant包下载(点击进入页面,另开一个新页面)
下载地址如下:
https://mvnrepository.com/artifact/org.apache.ant/ant/1.7.1 (点击进入页面,本页面被覆盖)
package file; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; public class Zip { public static void main(String[] args) { //文件所在路径 String path = "E:\test"; File dir = new File(path); if(!dir.isDirectory()) { System.out.println(path + "--路径不存在!"); } //所有文件 File[] files = new File(path).listFiles(); if(files == null || files.length < 1) { System.out.println(path + "--路径下无文件!"); } //压缩文件名 String zipname = "hello.zip"; File zipFile = new File(path + File.separator + zipname); if(zipFiles(files, zipFile) == 0) { System.out.println("压缩文件ok!"); } } public static int zipFiles(File[] files, File zipFile) { if (zipFile.exists()) { System.out.println(zipFile + "--压缩文件已存在!"); return -1; } BufferedInputStream bis = null; ZipOutputStream zos = null; try { zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile))); byte[] bufs = new byte[1024*10]; for(int i=0;i<files.length;i++){ //创建ZIP实体,并添加进压缩包 ZipEntry zipEntry = new ZipEntry(files[i].getName()); zos.putNextEntry(zipEntry); //乱码问题 zos.setEncoding("gbk"); bis = new BufferedInputStream(new FileInputStream(files[i]), 1024*10); int read = 0; while((read=bis.read(bufs, 0, 1024*10)) != -1){ zos.write(bufs,0,read); } } return 0; }catch (IOException e) { e.printStackTrace(); System.out.println("压缩文件过程BUG了!"); return -1; } finally { try { if (zos != null) { zos.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (bis != null) { bis.close(); } } catch (Exception e) { e.printStackTrace(); } } } }