文件目录压缩工具类
public class FileZipUtils {
private static void zipFile(ZipOutputStream zipOutputStream, File file, String parentFileName){
FileInputStream in = null;
try {
ZipEntry zipEntry = new ZipEntry( parentFileName+file.getName() );
zipOutputStream.putNextEntry( zipEntry );
in = new FileInputStream( file);
int len;
byte [] buf = new byte[8*1024];
while ((len = in.read(buf)) != -1){
zipOutputStream.write(buf, 0, len);
}
zipOutputStream.closeEntry( );
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try{
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 递归压缩目录结构
* @param zipOutputStream
* @param file
* @param parentFileName
*/
private static void directory(ZipOutputStream zipOutputStream,File file,String parentFileName){
File[] files = file.listFiles();
String parentFileNameTemp = null;
for (File fileTemp:
files) {
parentFileNameTemp = StringUtils.isEmpty(parentFileName)?fileTemp.getName():parentFileName+"/"+fileTemp.getName();
if(fileTemp.isDirectory()){
directory(zipOutputStream,fileTemp, parentFileNameTemp);
}else{
zipFile(zipOutputStream,fileTemp,parentFileNameTemp);
}
}
}
/**
* 压缩文件目录
* @param source 源文件目录(单个文件和多层目录)
* @param destit 目标目录
*/
public static void zipFiles(String source,String destit) {
File file = new File( source );
ZipOutputStream zipOutputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream( destit );
zipOutputStream = new ZipOutputStream( fileOutputStream );
if (file.isDirectory()) {
directory( zipOutputStream, file, "" );
} else {
zipFile( zipOutputStream, file, "" );
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
zipOutputStream.close();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
测试类
public class DemoApplication {
public static void main(String[] args) {
FileZipUtils.zip( "C:\\Users\\test\\Desktop\\test1" ,"C:/Users/test/Desktop/test.zip");
}
}
多级目录
压缩后的样式
单个文件压缩