這幾天學習Java IO,老師讓做一個Java Zip壓縮程序,參考了網上的一些很不錯的代碼,結合自己的需要,寫了下面這段代碼:
/**
*
*/
package zxcTest;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @author Xiaocaho Zhao
*
*/
public class Compressfile {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//需要壓縮的文件或目錄的路徑
File file = new File("C:/Users/Administrator/Desktop/java_zip");
if(file.canRead())
{
//FileOutputStream的文件路徑必須帶後綴,不然會出現“文件無法訪問的異常”
ZipOutputStream out = new ZipOutputStream(
new FileOutputStream(file.getPath() + ".zip"));
//找到最後一個‘/’的位置,以便取出當前的文件名或目錄名
Zip(file.getPath(),file.getPath().lastIndexOf("//"),out);
out.closeEntry();
out.close();
}else{
System.out.println("file can not read.");
}
}
public static void Zip(String path,int baseindex,ZipOutputStream out) throws IOException{
//要壓縮的目錄或文件
File file = new File(path);
File[] files;
if(file.isDirectory()){//若是目錄,則列出所有的子目錄和文件
files = file.listFiles();
}else{//若爲文件,則files數組只含有一個文件
files = new File[1];
files[0] = file;
}
for(File f:files){
if(f.isDirectory()){
//去掉壓縮根目錄以上的路徑串,一面ZIP文件中含有壓縮根目錄父目錄的層次結構
String pathname = f.getPath().substring(baseindex+1);
//空目錄也要新建喲個項
out.putNextEntry(new ZipEntry(pathname + "/"));
//遞歸
Zip(f.getPath(),baseindex,out);
}else{
//去掉壓縮根目錄以上的路徑串,一面ZIP文件中含有壓縮根目錄父目錄的層次結構
String pathname = f.getPath().substring(baseindex+1);
//新建項爲一個文件
out.putNextEntry(new ZipEntry(pathname));
//讀文件
BufferedInputStream in = new BufferedInputStream(
new FileInputStream(f));
int c;
while((c=in.read()) != -1)
out.write(c);
in.close();
}
}
}
}