public class zipUtil {
public static void main(String[] args) throws IOException {
zipUtil zipUtil = new zipUtil();
zipUtil.zip(new File("test3"), new File("jieya.zip"));
zipUtil.unZip(new File("jieya.zip"), new File("test5"));
}
public void zipFile(File file, String name, ZipOutputStream zipOutPutStream) throws IOException {
zipOutPutStream.putNextEntry(new ZipEntry(name));
FileInputStream inputStream = new FileInputStream(file);
int len = 0;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes)) != -1){
zipOutPutStream.write(bytes);
}
zipOutPutStream.closeEntry();
}
public void zipDir(File file, String name, ZipOutputStream zipOutputStream) throws IOException {
if (file.isDirectory()){
File[] files = file.listFiles();
zipOutputStream.putNextEntry(new ZipEntry(name + "/"));
zipOutputStream.closeEntry();
if (files != null){
for (File file1 : files) {
if (file1.isFile()){
zipFile(file1, name + "/" + file1.getName(), zipOutputStream);
} else {
zipDir(file1, name + "/" + file1.getName(), zipOutputStream);
}
}
}
}
}
public void zip(File files, File destFile) throws IOException {
if(files == null){
return;
}
FileOutputStream fileOutputStream = new FileOutputStream(destFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);
zipOutputStream.setLevel(5);
if (files.isDirectory()){
zipDir(files, files.getName(), zipOutputStream);
} else {
zipFile(files, files.getName(), zipOutputStream);
}
zipOutputStream.closeEntry();
zipOutputStream.close();
fileOutputStream.close();
}
public void unZip(File zipFile, File destFile) throws IOException {
if (zipFile == null){
return;
}
if (!destFile.exists()){
destFile.mkdirs();
}
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFile));
ZipEntry zipEntry;
while ((zipEntry = zipInputStream.getNextEntry()) != null){
if (zipEntry.isDirectory()){
new File(destFile.getName() + "/" + zipEntry.getName()).mkdirs();
} else {
String name = zipEntry.getName();
File f = new File(destFile, name);
FileOutputStream fileOutputStream = new FileOutputStream(f, false);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = zipInputStream.read(bytes)) != -1){
fileOutputStream.write(bytes, 0, len);
}
fileOutputStream.close();
}
zipInputStream.closeEntry();
}
zipInputStream.close();
}
}