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(); } } }
时间: 2024-10-29 03:22:45