Java壓縮與解壓文件的簡單使用

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();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章