首页 > 代码库 > java 压缩以及解压文件,有tar,zip,gz(gizp)和解压

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

 

java 压缩以及解压文件,有tar,zip,gz(gizp)和解压