package com.newio;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.*;
class ZipTool{
/**
* 1.压缩一个文件:
* @author ManagementAndJava
* @param fileName:被压缩的文件名
* @param zipFileName:压缩完成的文件名
* @throws IOException
*
*/
public static void compressFile(String fileName,String zipFileName) throws IOException{
File file = new File(fileName);
File zipFile = new File(zipFileName);
ZipOutputStream zos = new ZipOutputStream(new CheckedOutputStream(
new FileOutputStream(zipFile),new Adler32()));
BufferedOutputStream bos = new BufferedOutputStream(zos);
zos.putNextEntry(new ZipEntry(file.getName()));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int len;
byte[] bytes = new byte[1024];
while((len = bis.read(bytes))!=-1){
bos.write(bytes, 0, len);
bos.flush();
}
zos.closeEntry();
bis.close();
zos.close();
}
/**
* 2.压缩一个文件夹:
* @author ManagementAndJava
* @param fileName:被压缩的文件名
* @param zipFileName:压缩完成的文件名
* @throws IOException
*
*/
public static void compressFiles(String fileName,String zipFileName) throws IOException{
File file = new File(fileName);
File zipFile = new File(zipFileName);
ZipOutputStream zos = new ZipOutputStream(new CheckedOutputStream(
new FileOutputStream(zipFile),new Adler32()));
BufferedOutputStream bos = new BufferedOutputStream(zos);
if(file.isDirectory()){
int len;
byte[] bytes = new byte[1024];
BufferedInputStream bis ;
File[] files = file.listFiles();
for(int i=0;i<files.length;i++){
bis = new BufferedInputStream(new FileInputStream(files[i]));
zos.putNextEntry(new ZipEntry(files[i].getName()));
while((len = bis.read(bytes))!=-1){
bos.write(bytes,0,len);
bos.flush();
}
bis.close();
}
zos.closeEntry();
}
bos.close();
}
/**
* 3.压缩一个目录:其中可以含有多个文件和文件夹;
* @author ManagementAndJava
* @param fileName:被压缩的文件名
* @param zipFileName:压缩完成的文件名
* @throws IOException
*
*/
public static void compressDir(String fileName,String zipFileName) throws IOException{
File inFile = new File(fileName);
File zipFile = new File(zipFileName);
ZipOutputStream zos = new ZipOutputStream(
new CheckedOutputStream(
new FileOutputStream(zipFile),new Adler32()));
BufferedOutputStream bos = new BufferedOutputStream(zos);
class ListDir{
private ArrayList<String> list = new ArrayList<String>();
public ArrayList<String> listDir(File dir){
if(dir.isDirectory()){
File[] files = dir.listFiles();
for(File f:files){
listDir(f);
}
}
else{
String dirName = dir.getAbsolutePath();
list.add(dirName);
}
return list;
}
}
ArrayList<String> list = new ListDir().listDir(inFile);
int len;
BufferedInputStream bis;
for(int i=0;i<list.size();i++){
bis = new BufferedInputStream(new FileInputStream(list.get(i)));
zos.putNextEntry(new ZipEntry(list.get(i)));
byte[] bytes = new byte[512];
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
bos.flush();
}
bis.close();
}
bos.close();
}
}
public class ZipDemo {
public static void main(String[] args) throws IOException {
ZipTool.compressFile("f:\\javatest\\1.java", "f:\\file.zip");
ZipTool.compressFiles("f:\\javatest\\text", "f:\\files.zip");
ZipTool.compressDir("f:\\javatest", "f:\\files.zip");
System.out.println("zip succeed");
}
}