public static String compressFile(File sourceFile,String targetPath) throws Exception {
File targetFile = new File(targetPath);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
OutputStream outputStream = null;
ZipOutputStream zipOutputStream = null;
InputStream inputStream = null;
try {
String targetName = sourceFile.getName() + ".zip";
outputStream = new FileOutputStream(targetPath + File.separator + targetName);
zipOutputStream = new ZipOutputStream(new BufferedOutputStream(outputStream));
createCompressedFile(zipOutputStream, sourceFile, "");
zipOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
throw new Exception();
} finally {
if (null != inputStream) {
inputStream.close();
if (null != zipOutputStream) {
zipOutputStream.close();
}
if (null != outputStream) {
outputStream.close();
}
}
}
return "ok";
}
public static void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{
if(file.isDirectory()){
File[] files = file.listFiles();
out.putNextEntry(new java.util.zip.ZipEntry(dir + File.separator));
dir = dir.length() == 0 ? "" : dir + File.separator;
//将文件夹中的文件打包
for(int i = 0;i < files.length;i++){
//递归处理
createCompressedFile(out, files[i], dir + files[i].getName());
}
} else{
FileInputStream fis = new FileInputStream(file);
out.putNextEntry(new java.util.zip.ZipEntry(dir));
int j = 0;
byte[] buffer = new byte[8192];
while((j = fis.read(buffer)) > 0){
out.write(buffer,0,j);
}
fis.close();
}
}