下面是我做的一个压缩代码,有注释,你能看懂的话就这块就真的懂了....
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
class Demo8 {
public static void main(String[] args) throws IOException {
File target = new File("e:\\java2345");
// 创建输出流 ZipOutputStream , 随时准备写入压缩数据
ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(target.getPath() + ".zip"));
//zipDir(target, zout, target.getAbsolutePath().length()+1);
zipDir(target, zout, "");
zout.close();
}
private static void zipDir(File target, ZipOutputStream zout, String rootPath) throws IOException {
// 遍历目录 如果是目录 创建新的条目接着递归 如果是文件,创建新的条目,拷贝数据
File[] files = target.listFiles();
// 遍历子文件
for(File file : files) {
if(file.isDirectory()) {
// 是目录, 递归
zipDir(file, zout, rootPath + file.getName() + "/");
}else {
// 是文件, 文件要压缩
// 创建新的压缩条目
String path = rootPath + file.getName();
System.out.println(path);
// 获得相对于target的目录
zout.putNextEntry(new ZipEntry(path));
InputStream in = new FileInputStream(file);
int len;
byte[] buffer = new byte[1024];
while((len=in.read(buffer))!=-1)
zout.write(buffer, 0, len);
//in.close();
zout.closeEntry();
}
}
}
} |