44 Android中文件压缩类 - 雪炭网

Android中文件压缩类2016-04-18 12:10:24

( 还没有投票,继续加油! )
分享:
31.3K
package com.my.new.package;
  
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
  
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.LoggerFactory;
  
public class ZipUtil {
  protected static final org.slf4j.Logger log = LoggerFactory.getLogger(ZipUtil.class);
  private static final int BUFFER = 2048;
  
  /**
   * 解压文件到指定路径
   *
   * @param filePath
   * @param upZipPath
   * @return 返回解压的文件集合
   */
  public static List<File> unZip(String filePath, String upZipPath) {
    List<File> list = new ArrayList<File>();
    int count = -1;
    File file = null;
    InputStream is = null;
    FileOutputStream fos = null;
    BufferedOutputStream bos = null;
    // 生成指定的保存目录
    String savePath = upZipPath;
    if (!new File(savePath).exists()) {
      new File(savePath).mkdirs();
    }
  
    try {
      ZipFile zipFile = new ZipFile(filePath, "GBK");
      Enumeration enu = zipFile.getEntries();
      while (enu.hasMoreElements()) {
        ZipEntry zipEntry = (ZipEntry) enu.nextElement();
        if (zipEntry.isDirectory()) {
          new File(savePath + "/" + zipEntry.getName()).mkdirs();
          continue;
        }
        if (zipEntry.getName().indexOf("/") != -1) {
          new File(savePath
              + "/"
              + zipEntry.getName().substring(0,
                  zipEntry.getName().lastIndexOf("/")))
              .mkdirs();
        }
        is = zipFile.getInputStream(zipEntry);
        file = new File(savePath + "/" + zipEntry.getName());
        fos = new FileOutputStream(file);
        bos = new BufferedOutputStream(fos, BUFFER);
  
        byte buf[] = new byte[BUFFER];
        while ((count = is.read(buf)) > -1) {
          bos.write(buf, 0, count);
        }
  
        bos.flush();
        fos.close();
        is.close();
        list.add(file);
      }
  
      zipFile.close();
      return list;
    } catch (IOException ioe) {
      log.error(ioe.getMessage());
      return list;
    }
  }
  
  /**
   * RAR 需要配置rar路径
   *
   * @param filePath
   * @param unRarPath
   *      路径要唯一,否则获取文件列表会出错
   * @return
   */
  public static int unRar(String filePath, String unRarPath) {
    int result = -99;
    if (!(new File(unRarPath).exists())) {
      new File(unRarPath).mkdirs();
    }
    try {
      //String cmd = GlobalConfig.getConfigValue("cmd.path");
      String cmd="test";
      String unrarCmd = cmd + " e -r -o+ " + filePath + " " + unRarPath;
      Runtime rt = Runtime.getRuntime();
  
      Process pre = rt.exec(unrarCmd);
      while(result==-99){
      try {
        Thread.sleep(1000L);
        result = pre.exitValue();
      } catch (Exception e) {
        // TODO: handle exception
        result = -99;
      }
      }
      InputStreamReader isr = new InputStreamReader(pre.getInputStream());
      BufferedReader bf = new BufferedReader(isr);
      String line = null;
      while ((line = bf.readLine()) != null) {
        line = line.trim();
        if ("".equals(line)) {
          continue;
        }
        log.info(line);
      }
      bf.close();
      if (result != 0) {
        log.error("unRar " + pre.exitValue());
      }
      // 杀死进程 退出
      // pre.destroy();
      return result;
    } catch (Exception e) {
      log.error(e.getMessage() + ": " + e.getStackTrace());
      return -2;
    }
  }
  
  /***
   * 将多个文件打成压缩包
   *
   * @param list
   *      需打包的文件路径集合
   * @param zipfilename
   *      压缩包名称
   */
  public static void listToZip(List<String> list, String zipfilename) {
    FileInputStream is = null;
    String path = "";
    File file = null;
    ZipOutputStream zos = null;
    try {
      if (list != null && list.size() > 0) {
        //String uri = GlobalConfig.getConfigValue("zipFile.path");
        String uri="D:/ZIP";
        File f = new File(uri);
        if(!f.exists()){
          f.mkdirs();
        }
        zipfilename = uri + zipfilename;
        //创建zip文件输出流
        zos = new ZipOutputStream(new FileOutputStream(new File(
            zipfilename)));
        zos.setEncoding("GBK");
        for (int i = 0; i < list.size(); i++) {
          path = list.get(i);
          file = new File(path);
          if (file.exists()) {
            //创建源文件输入流
            is = new FileInputStream(file);
            zos.putNextEntry(new ZipEntry(file.getName()));
            byte[] buf = new byte[BUFFER];
            int length = -1;
            while ((length = is.read(buf)) != -1) {
              zos.write(buf, 0, length);
              zos.flush();
            }
            zos.closeEntry();
            is.close();
          } else {
            System.out.println("源文件不存在");
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (is != null) {
          is.close();
        }
        if (zos != null) {
          zos.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
  
    }
  
  }
  /***
   * 将多个文件打成压缩包(压缩包内文件名称由参数中传入)
   *
   * @param list
   *      需打包的文件信息集合
   * @param zipfilename
   *      压缩包名称
   */
  public static void listMapToZip(List<Map<String,Object>> list, String zipfilename) {
    FileInputStream is = null;
    String path = "";
    File file = null;
    ZipOutputStream zos = null;
    try {
      if (list != null && list.size() > 0) {
        //String uri = GlobalConfig.getConfigValue("zipFile.path");
        String uri="D:/ZIP";
        File f = new File(uri);
        if(!f.exists()){
          f.mkdirs();
        }
        zipfilename = uri + zipfilename;
        //创建zip文件输出流
        zos = new ZipOutputStream(new FileOutputStream(new File(
            zipfilename)));
        zos.setEncoding("GBK");
        for (Map map : list) {
          path = map.get("filePath")+"";
          file = new File(path);
          if (file.exists()) {
            //创建源文件输入流
            is = new FileInputStream(file);
            zos.putNextEntry(new ZipEntry(map.get("fileName")+""));
            byte[] buf = new byte[BUFFER];
            int length = -1;
            while ((length = is.read(buf)) != -1) {
              zos.write(buf, 0, length);
              zos.flush();
            }
            zos.closeEntry();
            is.close();
          } else {
            System.out.println("源文件不存在");
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (is != null) {
          is.close();
        }
        if (zos != null) {
          zos.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
  
    }
  
  }
  public static void main(String[] args) throws Exception {
    List<String> list = new ArrayList<String>();
    list.add("D:/File/img/tempImg/7f7ffd45856be6aa.txt");
    list.add("D:/File/img/tempImg/63f8959465093ec0.jpeg");
    list.add("D:/File/img/tempImg/815b476dc8cf790e.txt");
    list.add("D:/File/img/tempImg/4451519220dad91a.txt");
    //ZipUtil.listToZip(list, "TEST.zip");
      
    System.out.println(ZipUtil.unZip("D:/ZIP_TEST.zip", "D:/ZIP/bb/").toString());
    //Map map = new HashMap<String, Object>();
    //map.put("me", null);
    //System.out.println(String.valueOf(map.get("me")));
  }
}






头像

snowcoal
  • android
  • 文件压缩类

本文标签:

android文件压缩类

收藏到我的私密空间

标题:Android中文件压缩类

作者:花花世界

你暂未登录,请登录后才可收藏至您的私密空间 确认取消
雪炭网

键盘操作 更便捷 -雪炭网雪中送炭-乐趣无限

如果本站的内容有幸帮助到了您,建议您了解一下当页的广告内容哦,我们的进步离不开您的支持,Thank you~