package com.bq.chzd.web.utils; 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; /** * 文件壓縮類 * @author zhaohong.Luo * */ public class GZIPUtils { /** * 文件壓縮類 * @param source * @return */ 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 sources * @param target * @return */ 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 { //解決中文亂碼 String fileName = new String(file.getAbsolutePath().getBytes("GBK"),"ISO-8859-1"); System.out.println(fileName); os.putArchiveEntry(new TarArchiveEntry(file,fileName)); 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; } } |
|