Java提供了java.util.zip包用來相容ZIP格式的資料壓縮。它提供了一系列的類用來讀取,建立,修改ZIP格式的檔案。
其中主要的類:
ZipEntry 儲存ZIP實體
ZipInputStream 一個輸入過濾流,用來讀取ZIP格式檔案中的檔案
ZipOutputStream 一個輸出過濾流,用來向ZIP格式檔案口寫入檔案
下面的程式示範了怎樣利用java.util.zip包實現資料的壓縮:
/**
* author suqiang
* create on 2008-7-26
*/
import java.io.*;
import java.util.zip.*;
public class Zip {
public static final int BUFFER = 1024;
public static void main(String[] args) {
try {
FileOutputStream dest = new FileOutputStream("C://SuQiang.zip");
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
putToZip(new File("C://SuQiang"), out, "");
out.close();
}catch (FileNotFoundException e1) {
e1.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* put file(include directory) to zip file
* @param file:The file to be zipped
* @param out:The zipped file
* @param dir
* @throws IOException
*/
private static void putToZip(File file,ZipOutputStream out, String dir) throws IOException{
if(file.isDirectory()){
File[] files = file.listFiles();
dir = dir + (dir.length()==0 ?"":"/")+file.getName();
for(int i=0;i<files.length;i++)
putToZip(files[i],out,dir);
}else{
byte[]data = new byte[BUFFER];
FileInputStream fi = new FileInputStream(file);
BufferedInputStream origin = new BufferedInputStream(fi,BUFFER);
dir = dir.length()==0?"":dir+"/"+ file.getName();
ZipEntry entry = new ZipEntry(dir);
out.putNextEntry(entry);
int count;
while((count = origin.read(data,0,BUFFER))!= -1)
out.write(data,0,count);
origin.close();
fi.close();
}
}
}