1.需要导入的两个架包
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
用apache的相关类代替Java的相关类,可以解决压缩文件中中文文件名乱码的问题。
2.代码如下
/**
* 压缩文件
* @param zipFile 压缩后的压缩包文件
* @param files 要压缩的文件数组
*/
public static void zip(File zipFile,File[] files){
if(files==null || files.length==0){
return;
}
byte[] buffer=new byte[2048];
FileInputStream fis=null;
ZipOutputStream zos=null;
try{
zos=new ZipOutputStream(new FileOutputStream(zipFile));
for(File file : files){
fis=new FileInputStream(file);
zos.putNextEntry(new ZipEntry(file.getName()));
zos.setEncoding("GBK");
int len;
while((len=fis.read(buffer))>0){
zos.write(buffer,0,len);
}
zos.closeEntry();
fis.close();
}
zos.close();
}
catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
}
}
3.测试代码如下
File f=new File("D:\\tmp\\212033");
File zipFile=new File("D:\\tmp\\212033.zip");
Test11.zip(zipFile,f.listFiles());
该压缩方法不支持通过f.listFiles()传入文件数组时,文件夹中包含文件夹的情况。