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那一段附近的代码替换自己需要的路径

猜你喜欢

转载自blog.csdn.net/ilhxasll/article/details/82768927