zoukankan      html  css  js  c++  java
  • java 压缩以及解压文件,有tar,zip,gz(gizp)和解压

    package com.yabsz.decompCompr;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class main {
        public static void main(String[] args) {
            //需要下载commons-net-ftp-2.0.jar包下载地址:http://download.csdn.net/detail/u010696272/8006739
            
            //第一步:获取一个文件夹下的所有的文件
              List<File> files = file.getFiles("D:\test");
              List<File> sources = new ArrayList<File>();
                for(File f : files){
                    System.out.println(f.getName());
                    System.out.println(f.toURI());
                    sources.add(f);
             }
            //第二步:把获取的文件下的文件压缩成一个tar文件 ,sources:要压缩的文件,target压缩的路径
            File target = new File("D:\test2\release_package.tar");
            file.compress(GZIPUtil.pack(sources, target));
            
            try {
                //第三步把tar文件压缩成tar.gz文件也就是gzip文件,siuress:要压缩的tar文件,gzget:压缩后的gz文件
                String siuress ="D:/test2/release_package.tar";
                String gzget = "D:/test2/release_package.tar.gz";
                GZipUtils.compress(siuress, gzget);
                //第四步解压:把gz文件解压成tar文件,sougz:要解压的gz,tar:解压后的tar文件
                String sougz= "D:/test2/release_package.tar.gz";
                String tar ="D:/test2/123.tar";
                GZipUtils.decompress(sougz, tar);
                //第五步,解压tar文件,soufile:要解压的tar路径,srcfile:后放的路径
                String soufile = "D:\test2\release_package.tar";
                String srcfile = "D:\test2\text";
                TarUtils.dearchive(soufile,srcfile);
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            
        }
    }
    package com.yabsz.decompCompr;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.zip.GZIPOutputStream;
    
    
    public class file {
        /**
         * 
         * @Title: compress
         * @Description: 将文件用tar压缩
         * @param source
         *            需要压缩的文件
         * @return File 返回压缩后的文件
         * @throws
         */
        public static File compress(File source) {
            File target = new File(source.getName() + ".gz");
            FileInputStream in = null;
            GZIPOutputStream out = null;
            try {
                in = new FileInputStream(source);
                out = new GZIPOutputStream(new FileOutputStream(target));
                byte[] array = new byte[1024];
                int number = -1;
                while ((number = in.read(array, 0, array.length)) != -1) {
                    out.write(array, 0, number);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return null;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                        return null;
                    }
                }
    
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                        return null;
                    }
                }
            }
            return target;
        }
        
        /***
         * 指定文件夹下的所有文件
         * @param path
         * @return
         */
        public static List<File> getFiles(String path){
            File root = new File(path);
            List<File> files = new ArrayList<File>();
            if(!root.isDirectory()){
                files.add(root);
            }else{
                File[] subFiles = root.listFiles();
                for(File f : subFiles){
                    files.addAll(getFiles(f.getAbsolutePath()));
                }    
            }
            return files;
        }
    }
    package com.yabsz.decompCompr;
    
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.List;
    import java.util.zip.GZIPOutputStream;
    
    import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
    import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
    import org.apache.commons.compress.utils.IOUtils;
    
    /**
     * @Title: GZIPUtil.java
     * @Description: gzip文件压缩和解压缩工具类
     * @author LM
     * @date 2009-11-4 下午06:23:29
     * @version V1.0
     */
    public class GZIPUtil {
    
        /**
         * 
         * @Title: pack
         * @Description: 将一组文件打成tar包
         * @param sources
         *            要打包的原文件数组
         * @param target
         *            打包后的文件
         * @return File 返回打包后的文件
         * @throws
         */
        public static File pack(List<File> sources, File target) {
            FileOutputStream out = null;
            try {
                out = new FileOutputStream(target);
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
            TarArchiveOutputStream os = new TarArchiveOutputStream(out);
            for (File file : sources) {
                try {
                    System.out.println(file.getName());
                    os.putArchiveEntry(new TarArchiveEntry(file));
                    IOUtils.copy(new FileInputStream(file), os);
                    os.closeArchiveEntry();
    
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.flush();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return target;
        }
    }
    package com.yabsz.decompCompr;
    /**
     * 2010-4-13
     */
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    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.io.OutputStream;
    import java.util.zip.GZIPInputStream;
    import java.util.zip.GZIPOutputStream;
    
    import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
    import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
    
    /**
     * GZIP工具
     * 
     * @author 
     * @since 1.0
     */
    public abstract class GZipUtils {
    
        public static final int BUFFER = 1024;
        public static final String EXT = ".gz";
    
        /**
         * 数据压缩
         * 
         * @param data
         * @return
         * @throws Exception
         */
        public static byte[] compress(byte[] data) throws Exception {
            ByteArrayInputStream bais = new ByteArrayInputStream(data);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
            // 压缩
            compress(bais, baos);
    
            byte[] output = baos.toByteArray();
    
            baos.flush();
            baos.close();
    
            bais.close();
    
            return output;
        }
    
        /**
         * 文件压缩
         * 
         * @param file
         * @throws Exception
         */
        public static void compress(File file) throws Exception {
            compress(file, true);
        }
    
        /**
         * 文件压缩
         * 
         * @param file
         * @param delete
         *            是否删除原始文件
         * @throws Exception
         */
        public static void compress(File file, boolean delete) throws Exception {
            FileInputStream fis = new FileInputStream(file);
            FileOutputStream fos = new FileOutputStream(file.getPath() + EXT);
    
            compress(fis, fos);
    
            fis.close();
            fos.flush();
            fos.close();
    
            if (delete) {
                file.delete();
            }
        }
    
        /**
         * 数据压缩
         * 
         * @param is
         * @param os
         * @throws Exception
         */
        public static void compress(InputStream is, OutputStream os)
                throws Exception {
    
            GZIPOutputStream gos = new GZIPOutputStream(os);
    
            int count;
            byte data[] = new byte[BUFFER];
            while ((count = is.read(data, 0, BUFFER)) != -1) {
                gos.write(data, 0, count);
            }
    
            gos.finish();
    
            gos.flush();
            gos.close();
        }
    
        /**
         * 文件压缩
         * 
         * @param path
         * @throws Exception
         */
        public static void compress(String path) throws Exception {
            compress(path, true);
        }
    
        /**
         * 文件压缩
         * 
         * @param path
         * @param delete
         *            是否删除原始文件
         * @throws Exception
         */
        public static void compress(String path, boolean delete) throws Exception {
            File file = new File(path);
            compress(file, delete);
        }
    
        /**
         * 文件压缩
         * 
         * @param path
         * @param delete
         *            是否删除原始文件
         * @throws Exception
         */
        public static void compress(String inputFileName, String outputFileName)
                throws Exception {
            FileInputStream inputFile = new FileInputStream(inputFileName);
            FileOutputStream outputFile = new FileOutputStream(outputFileName);
            compress(inputFile, outputFile);
            inputFile.close();
            outputFile.flush();
            outputFile.close();
        }
    
        /**
         * 数据解压缩
         * 
         * @param data
         * @return
         * @throws Exception
         */
        public static byte[] decompress(byte[] data) throws Exception {
            ByteArrayInputStream bais = new ByteArrayInputStream(data);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
            // 解压缩
    
            decompress(bais, baos);
    
            data = baos.toByteArray();
    
            baos.flush();
            baos.close();
    
            bais.close();
    
            return data;
        }
    
        /**
         * 文件解压缩
         * 
         * @param file
         * @throws Exception
         */
        public static void decompress(File file) throws Exception {
            decompress(file, true);
        }
    
        /**
         * 文件解压缩
         * 
         * @param file
         * @param delete
         *            是否删除原始文件
         * @throws Exception
         */
        public static void decompress(File file, boolean delete) throws Exception {
            FileInputStream fis = new FileInputStream(file);
            FileOutputStream fos = new FileOutputStream(file.getPath().replace(EXT,
                    ""));
            decompress(fis, fos);
            fis.close();
            fos.flush();
            fos.close();
    
            if (delete) {
                file.delete();
            }
        }
    
        /**
         * 文件解压缩
         * 
         * @param file
         * @param delete
         *            是否删除原始文件
         * @throws Exception
         */
        public static void decompress(String inputFileName, String outputFileName)
                throws Exception {
            FileInputStream inputFile = new FileInputStream(inputFileName);
            FileOutputStream outputFile = new FileOutputStream(outputFileName);
            decompress(inputFile, outputFile);
            inputFile.close();
            outputFile.flush();
            outputFile.close();
        }
    
    
        /**
         * 数据解压缩
         * 
         * @param is
         * @param os
         * @throws Exception
         */
        public static void decompress(InputStream is, OutputStream os)
                throws Exception {
    
            GZIPInputStream gis = new GZIPInputStream(is);
    
            int count;
            byte data[] = new byte[BUFFER];
            while ((count = gis.read(data, 0, BUFFER)) != -1) {
                os.write(data, 0, count);
            }
    
            gis.close();
        }
    
        /**
         * 文件解压缩
         * 
         * @param path
         * @throws Exception
         */
        public static void decompress(String path) throws Exception {
            decompress(path, true);
        }
    
        /**
         * 文件解压缩
         * 
         * @param path
         * @param delete
         *            是否删除原始文件
         * @throws Exception
         */
        public static void decompress(String path, boolean delete) throws Exception {
            File file = new File(path);
            decompress(file, delete);
        }
    
    }
    package com.yabsz.decompCompr;
    /**
     * 2010-4-20
     */
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
    import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
    import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
    
    /**
     * TAR工具
     * 
     * @author 
     * @since 1.0
     */
    public abstract class TarUtils {
    
        private static final String BASE_DIR = "";
    
        // 符号"/"用来作为目录标识判断符
        private static final String PATH = "/";
        private static final int BUFFER = 1024;
    
        private static final String EXT = ".tar";
    
        /**
         * 归档
         * 
         * @param srcPath
         * @param destPath
         * @throws Exception
         */
        public static void archive(String srcPath, String destPath)
                throws Exception {
    
            File srcFile = new File(srcPath);
    
            archive(srcFile, destPath);
    
        }
    
        /**
         * 归档
         * 
         * @param srcFile
         *            源路径
         * @param destPath
         *            目标路径
         * @throws Exception
         */
        public static void archive(File srcFile, File destFile) throws Exception {
    
            TarArchiveOutputStream taos = new TarArchiveOutputStream(
                    new FileOutputStream(destFile));
    
            archive(srcFile, taos, BASE_DIR);
    
            taos.flush();
            taos.close();
        }
    
        /**
         * 归档
         * 
         * @param srcFile
         * @throws Exception
         */
        public static void archive(File srcFile) throws Exception {
            String name = srcFile.getName();
            //String basePath = srcFile.getParent();        
            String destPath =   name + EXT;
            archive(srcFile, destPath);
        }
    
        /**
         * 归档文件
         * 
         * @param srcFile
         * @param destPath
         * @throws Exception
         */
        public static void archive(File srcFile, String destPath) throws Exception {
            archive(srcFile, new File(destPath));
        }
    
        /**
         * 归档
         * 
         * @param srcPath
         * @throws Exception
         */
        public static void archive(String srcPath) throws Exception {
            File srcFile = new File(srcPath);
    
            archive(srcFile);
        }
    
        /**
         * 归档
         * 
         * @param srcFile
         *            源路径
         * @param taos
         *            TarArchiveOutputStream
         * @param basePath
         *            归档包内相对路径
         * @throws Exception
         */
        private static void archive(File srcFile, TarArchiveOutputStream taos,
                String basePath) throws Exception {
            if (srcFile.isDirectory()) {
                archiveDir(srcFile, taos, basePath);
            } else {
                archiveFile(srcFile, taos, basePath);
            }
        }
    
        /**
         * 目录归档
         * 
         * @param dir
         * @param taos
         *            TarArchiveOutputStream
         * @param basePath
         * @throws Exception
         */
        private static void archiveDir(File dir, TarArchiveOutputStream taos,
                String basePath) throws Exception {
    
            File[] files = dir.listFiles();
    
            if (files.length < 1) {
                TarArchiveEntry entry = new TarArchiveEntry(basePath
                        + dir.getName() + PATH);
    
                taos.putArchiveEntry(entry);
                taos.closeArchiveEntry();
            }
    
            for (File file : files) {
    
                // 递归归档
                archive(file, taos, basePath + dir.getName() + PATH);
    
            }
        }
    
        /**
         * 数据归档
         * 
         * @param data
         *            待归档数据
         * @param path
         *            归档数据的当前路径
         * @param name
         *            归档文件名
         * @param taos
         *            TarArchiveOutputStream
         * @throws Exception
         */
        private static void archiveFile(File file, TarArchiveOutputStream taos,
                String dir) throws Exception {
    
            /**
             * 归档内文件名定义
             * 
             * <pre>
             * 如果有多级目录,那么这里就需要给出包含目录的文件名
             * 如果用WinRAR打开归档包,中文名将显示为乱码
             * </pre>
             */
            TarArchiveEntry entry = new TarArchiveEntry(dir + file.getName());
    
            entry.setSize(file.length());
    
            taos.putArchiveEntry(entry);
    
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                    file));
            int count;
            byte data[] = new byte[BUFFER];
            while ((count = bis.read(data, 0, BUFFER)) != -1) {
                taos.write(data, 0, count);
            }
    
            bis.close();
    
            taos.closeArchiveEntry();
        }
    
        /**
         * 解归档
         * 
         * @param srcFile
         * @throws Exception
         */
        public static void dearchive(File srcFile) throws Exception {
            String basePath = srcFile.getParent();
            dearchive(srcFile, basePath);
        }
    
        /**
         * 解归档
         * 
         * @param srcFile
         * @param destFile
         * @throws Exception
         */
        public static void dearchive(File srcFile, File destFile) throws Exception {
    
            TarArchiveInputStream tais = new TarArchiveInputStream(
                    new FileInputStream(srcFile));
            dearchive(destFile, tais);
    
            tais.close();
    
        }
    
        /**
         * 解归档
         * 
         * @param srcFile
         * @param destPath
         * @throws Exception
         */
        public static void dearchive(File srcFile, String destPath)
                throws Exception {
            dearchive(srcFile, new File(destPath));
    
        }
    
        /**
         * 文件 解归档
         * 
         * @param destFile
         *            目标文件
         * @param tais
         *            ZipInputStream
         * @throws Exception
         */
        private static void dearchive(File destFile, TarArchiveInputStream tais)
                throws Exception {
    
            TarArchiveEntry entry = null;
            while ((entry = tais.getNextTarEntry()) != null) {
    
                // 文件
                String dir = destFile.getPath() + File.separator + entry.getName();
    
                File dirFile = new File(dir);
    
                // 文件检查
                fileProber(dirFile);
    
                if (entry.isDirectory()) {
                    dirFile.mkdirs();
                } else {
                    dearchiveFile(dirFile, tais);
                }
    
            }
        }
    
        /**
         * 文件 解归档
         * 
         * @param srcPath
         *            源文件路径
         * 
         * @throws Exception
         */
        public static void dearchive(String srcPath) throws Exception {
            File srcFile = new File(srcPath);
    
            dearchive(srcFile);
        }
    
        /**
         * 文件 解归档
         * 
         * @param srcPath
         *            源文件路径
         * @param destPath
         *            目标文件路径
         * @throws Exception
         */
        public static void dearchive(String srcPath, String destPath)
                throws Exception {
    
            File srcFile = new File(srcPath);
            dearchive(srcFile, destPath);
        }
    
        /**
         * 文件解归档
         * 
         * @param destFile
         *            目标文件
         * @param tais
         *            TarArchiveInputStream
         * @throws Exception
         */
        private static void dearchiveFile(File destFile, TarArchiveInputStream tais)
                throws Exception {
    
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(destFile));
    
            int count;
            byte data[] = new byte[BUFFER];
            while ((count = tais.read(data, 0, BUFFER)) != -1) {
                bos.write(data, 0, count);
            }
    
            bos.close();
        }
    
        /**
         * 文件探针
         * 
         * <pre>
         * 当父目录不存在时,创建目录!
         * </pre>
         * 
         * @param dirFile
         */
        private static void fileProber(File dirFile) {
    
            File parentFile = dirFile.getParentFile();
            if (!parentFile.exists()) {
    
                // 递归寻找上级目录
                fileProber(parentFile);
    
                parentFile.mkdir();
            }
    
        }
    
    }
  • 相关阅读:
    PhpPresentation ppt 导出PPT
    Springcloudalibaba学习实践(1) nacos环境搭建&Eureka Server搭建
    Springcloudalibaba学习实践(2) nacos&Eureka Server服务注册实践
    xna 3.1 to xna 4.0 conversion cheat sheet.(转)
    二分查找的越界以及边界值初始化问题
    决策树知识梳理
    论文分类及写作基础
    Cypher 入门笔记
    python字符串拼接
    Spring、Hibernate 事务流程分析Session生命周期
  • 原文地址:https://www.cnblogs.com/lbjz/p/4008458.html
Copyright © 2011-2022 走看看