/**
* 压缩文件
*
* @param 压缩源
* @param 压缩zip
* @param 压缩目标
*
* @throws IOException
*/
private static void zipFile(String source,
ZipOutputStream zos, String target) throws IOException {
// zip实体
ZipEntry ze = new ZipEntry(target);
zos.putNextEntry(ze);
// 读取文件压缩
FileInputStream fileStream = new FileInputStream(new File(source));
int readLen = 0;
byte[] buffer = new byte[8192];
while((readLen = fileStream.read(buffer)) != -1){
zos.write(buffer, 0, readLen);
}
fileStream.close();
}
/**
* 压缩目录
*
* @param 压缩源
* @param 压缩zip
* @param 压缩目标
*
* @throws IOException
*/
private static void zipDir(String source,
ZipOutputStream zos, String target) throws IOException {
// zip实体
ZipEntry ze = new ZipEntry(target);
zos.putNextEntry(ze);
// 目录下所有文件
File dir = new File(source);
android.util.Log.e(TAG,source);
File[] fileList = dir.listFiles();
if(fileList != null){
//android.util.Log.e(TAG, "file szie " + fileList.length);
for(File fileSub : fileList) {
//android.util.Log.e(TAG, "file name " + fileSub.getName());
//android.util.Log.e(TAG, "file path " + fileSub.getPath());
if(fileSub.isDirectory()){
zipDir(fileSub.getPath(), zos, target + fileSub.getName() + "/");
}else{
zipFile(fileSub.getPath(), zos, target + fileSub.getName());
}
}
}
}
/**
* zip
*
* @param 压缩源
* @param 压缩目标
*
* @throws IOException
*/
public static void zip(String source,
String outfile) throws IOException {
OutputStream os = null;
ZipOutputStream zos = null;
synchronized(class){
os = new FileOutputStream(file, false);
zos = new ZipOutputStream(new BufferedOutputStream(os));
zipDir(source, zos, source.getName() + "/");
zos.finish();
zos.close();
}
}