1. 程式人生 > >java進行檔案的壓縮(WAR)

java進行檔案的壓縮(WAR)

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Iterator; 
import org.apache.commons.compress.archivers.ArchiveException; 
import org.apache.commons.compress.archivers.ArchiveInputStream; 
import org.apache.commons.compress.archivers.ArchiveOutputStream; 
import org.apache.commons.compress.archivers.ArchiveStreamFactory; 
import org.apache.commons.compress.archivers.jar.JarArchiveEntry; 
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; 
import org.apache.commons.compress.utils.IOUtils; 
import org.apache.commons.io.FileUtils; 

public class WarZip {
/*    public static void unzip(String warPath, String unzipPath) { 
        File warFile = new File(warPath); 
        try { 
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(warFile)); 
        ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.JAR, 
        bufferedInputStream); 
        JarArchiveEntry entry = null; 
        while ((entry = (JarArchiveEntry) in.getNextEntry()) != null) { 
        if (entry.isDirectory()) { 
        new File(unzipPath, entry.getName()).mkdir(); 
        } else { 
        OutputStream out = FileUtils.openOutputStream(new File(unzipPath, entry.getName())); 
        IOUtils.copy(in, out); 
        out.close(); 
        } 
        } 
        in.close(); 
        } catch (FileNotFoundException e) { 
        System.err.println("未找到war檔案"); 
        } catch (ArchiveException e) { 
        System.err.println("不支援的壓縮格式"); 
        } catch (IOException e) { 
        System.err.println("檔案寫入發生錯誤"); 
        } 
        } */
    
    public static void zip(String zipDir,String contextPath) { 
            File outFile = new File("D:\\"+contextPath+".war"); 
        try { 
            outFile.createNewFile();
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(outFile)); 
            ArchiveOutputStream out = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.JAR,bufferedOutputStream); 
        if (zipDir.charAt(zipDir.length() - 1) != '/') { 
            zipDir += '/'; 
            } 
            Iterator files = FileUtils.iterateFiles(new File(zipDir), null, true); 
        while (files.hasNext()) { 
            File file = (File) files.next();
            String path = file.getPath();
            String[] split = path.split(contextPath);
            ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file, path.substring(path.length()-split[2].length(), path.length())); 
            out.putArchiveEntry(zipArchiveEntry); 
            IOUtils.copy(new FileInputStream(file), out); 
            out.closeArchiveEntry(); 
        } 
            out.finish(); 
            out.close(); 
        } catch (IOException e) { 
            System.out.println(e.getMessage());
            System.err.println("建立檔案失敗"); 
        } catch (ArchiveException e) { 
            System.err.println("不支援的壓縮格式"); 
        } 
    } 
}
 

網上找的稍微改了一下,路徑的話是放在了當前專案下的/resource/file下的資料夾,打包的時候從專案名稱下的一級開始打包,如不需要可以去掉split那一段附近的程式碼替換自己需要的路徑