java压缩与解压(Java.util.zip)详解编程语言

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.InputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipException; 
import java.util.zip.ZipFile; 
import java.util.zip.ZipInputStream; 
import java.util.zip.ZipOutputStream; 
  
/** 
 * 文件解压缩 
 * 
 * @author Tony 
 * 
 */ 
public final class FileToZip { 
  
    FileToZip() { 
  
    } 
  
    /** 
     * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的ZIP文件,并存放到zipFilePath。 
     * 
     * @param sourceFilePath 
     *            待压缩的文件路径 
     * @param zipFilePath 
     *            压缩后存放路径 
     * @param fileName 
     *            压缩后文件的名称 
     * @return flag 
     */ 
    public static boolean fileToZip(String sourceFilePath, String zipFilePath, 
                                    String fileName) { 
        boolean flag = false; 
        File sourceFile = new File(sourceFilePath); 
        FileInputStream fis = null; 
        BufferedInputStream bis = null; 
        FileOutputStream fos = null; 
        ZipOutputStream zos = null; 
  
        if (sourceFile.exists() == false) { 
            System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath 
                               + " 不存在. <<<<<<"); 
        } else { 
            try { 
                File zipFile = new File(zipFilePath + "/" + fileName + ".RAR"); 
                //                File zipFile = new File(zipFilePath + "/" + fileName + ".zip"); 
                if (zipFile.exists()) { 
                    System.out.println(">>>>>> " + zipFilePath + " 目录下存在名字为:" 
                                       + fileName + ".RAR" + " 打包文件. <<<<<<"); 
                } else { 
                    File[] sourceFiles = sourceFile.listFiles(); 
                    if (null == sourceFiles || sourceFiles.length < 1) { 
                        System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath 
                                           + " 里面不存在文件,无需压缩. <<<<<<"); 
                    } else { 
                        fos = new FileOutputStream(zipFile); 
                        zos = new ZipOutputStream(new BufferedOutputStream(fos)); 
                        byte[] bufs = new byte[1024 * 10]; 
                        for (int i = 0; i < sourceFiles.length; i++) { 
                            // 创建ZIP实体,并添加进压缩包 
                            ZipEntry zipEntry = new ZipEntry(sourceFiles[i] 
                                                             .getName()); 
                            zos.putNextEntry(zipEntry); 
                            // 读取待压缩的文件并写进压缩包里 
                            fis = new FileInputStream(sourceFiles[i]); 
                            bis = new BufferedInputStream(fis, 1024 * 10); 
                            int read = 0; 
                            while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) { 
                                zos.write(bufs, 0, read); 
                            } 
                        } 
                        flag = true; 
                    } 
                } 
            } catch (FileNotFoundException e) { 
                e.printStackTrace(); 
                throw new RuntimeException(e); 
            } catch (IOException e) { 
                e.printStackTrace(); 
                throw new RuntimeException(e); 
            } finally { 
                // 关闭流 
                try { 
                    if (null != bis) 
                        bis.close(); 
                    if (null != zos) 
                        zos.close(); 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                    throw new RuntimeException(e); 
                } 
            } 
        } 
  
        return flag; 
    } 
  
    public static void unZip(String sourceFilePath, String unzipFilePath) { 
        File sourceFile = new File(sourceFilePath); 
        ZipFile zipFile = null; 
        ZipEntry zipEntry = null; 
        ZipInputStream zis = null; 
        FileOutputStream fos = null; 
        FileInputStream fis = null; 
  
        if (sourceFile.exists() == false) { 
            System.out.println(">>>>>> 待解压的文件目录:" + sourceFilePath 
                               + " 不存在. <<<<<<"); 
        } else { 
            try { 
                System.out.println(">>>>>> 开始解压:" + sourceFilePath + " <<<<<<"); 
                zipFile = new ZipFile(sourceFile); 
                zis = new ZipInputStream(new FileInputStream(sourceFile)); 
                while ((zipEntry = zis.getNextEntry()) != null) { 
                    String fileName = zipEntry.getName(); 
                    File temp = new File(unzipFilePath + "//" + fileName); 
                    System.out.println(fileName + ">>>>>>解压到" + unzipFilePath); 
                    if (!temp.getParentFile().exists()) { 
                        temp.getParentFile().mkdirs(); 
                    } 
                    fos = new FileOutputStream(temp); 
                    InputStream is = zipFile.getInputStream(zipEntry); 
                    int len = 0; 
                    while ((len = is.read()) != -1) { 
                        fos.write(len); 
                    } 
                    is.close(); 
                } 
  
            } catch (FileNotFoundException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } catch (ZipException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } catch (IOException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } finally { 
                // 关闭流 
                try { 
                    if (null != fos) 
                        fos.close(); 
                    if (null != fis) 
                        fis.close(); 
                    if (null != zis) 
                        zis.close(); 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                    throw new RuntimeException(e); 
                } 
            } 
        } 
  
    } 
  
    /** 
     * 将文件打包成ZIP压缩文件,main方法测试 
     * 
     * @param args 
     */ 
    public static void main(String[] args) { 
        String sourceFilePath = "D://sss//lp20120301.rar"; 
        // String zipFilePath = "D://sss"; 
        // String fileName = "lp20120301"; 
        // boolean flag = FileToZip.fileToZip(sourceFilePath, zipFilePath, 
        // fileName); 
        // if(flag) { 
        // System.out.println(">>>>>> 文件打包成功. <<<<<<"); 
        // } else { 
        // System.out.println(">>>>>> 文件打包失败. <<<<<<"); 
        // } 
        FileToZip.unZip(sourceFilePath, "E://sdf"); 
    } 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10186.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论