package zipCompress;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class zipfile {
public static void main(String[] agrs){
zipfile zip = new zipfile();
File f = new File("file");
try {
//壓縮
zip.startZip(f.getName()+".zip",f);
//解壓
zip.unZipFile("file.zip");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 多級文件壓縮文件
* @param zipFileName 壓縮後的路徑和文件名
* @param inputFile 被壓縮的文件
* @throws Exception
*/
private void startZip(String zipFileName,File inputFile) throws Exception {
//創建壓縮路徑
File zipfile = new File(zipFileName);
if (!zipfile.exists()){
zipfile.mkdirs();
}
ZipOutputStream z_out = new ZipOutputStream(new FileOutputStream(new File(savepath,file.getName()+".zip")));
ZipFile(z_out,inputFile,inputFile.getName());
z_out.closeEntry();
z_out.close();
}
/**
* 壓縮文件方法
* @param z_out 壓縮流
* @param inputFile 被壓縮的文件
* @param base
* @throws IOException
*/
private void ZipFile(ZipOutputStream z_out,File inputFile,String base) throws IOException {
if (inputFile.isDirectory()){
File[] files = inputFile.listFiles();
//文件夾的路徑需要加/分隔符 不能是\
//new ZipEntry(base) 表示生成zip壓縮的對應被壓縮文件的目錄結構
//如果bas爲空 獲取文件夾的名稱加/
base = base.length() == 0 ?inputFile.getName()+"/":base+"/";
z_out.putNextEntry(new ZipEntry(base));
for (int i = 0; i <files.length; i++) {
ZipFile(z_out,files[i],base+files[i].getName());
}
}else {
//創建新的進入點
z_out.putNextEntry(new ZipEntry(base));
//System.out.println(base); //輸出文件結構
//創建文件讀取流獲取被壓縮文件的內容
FileInputStream in = new FileInputStream(inputFile);
int b;
while ((b = in.read()) != -1){
//寫入到壓縮流中
z_out.write(b);
}
in.close();
}
}
/**
* 解壓Zip文件夾
* @param inputFile 輸入文件名
* @throws IOException
*/
private void unZipFile(String inputFile) throws IOException {
ZipInputStream z_in = new ZipInputStream(new FileInputStream(inputFile));
//獲得目錄結構 只能獲取當前一級目錄
ZipEntry entry = null;
FileOutputStream out = null;
while (((entry = z_in.getNextEntry()) != null)){
File file = new File(entry.getName());
if(entry.isDirectory()){
if (!file.exists()){
//如果不存在 創建所在文件夾
file.mkdir();
}
}else {
//獲取文件的目錄
//System.out.println("ss:"+entry);
if (!file.exists()){
//如果不存在 創建所在文件
file.createNewFile();
}
//寫入文件
out = new FileOutputStream(file);
int b;
while ((b = z_in.read()) != -1){
//寫入到壓縮流中
out.write(b);
}
out.close();
}
z_in.closeEntry();
}
z_in.close();
}
}
Java壓縮與解壓文件的簡單使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.