zoukankan      html  css  js  c++  java
  • 【转】JAVA解压.TAR.Z及.ZIP文件

     解压.ZIP文件

    package app.qdupr.Method;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Enumeration;
     
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
     
    /**
     * ZIP文件解压
     * @author Administrator
     *
     */
    public class ZipUncompress {
      
     private static int bufSize = 8096;    //size of byte
     
     public static void main(String[] args) throws Exception  
        {  
            
      
            String tmpFile = "C:\Users\Administrator\Desktop\20151101.rar";  
            ZipUncompress.unZip(tmpFile, tmpFile.substring(0, tmpFile.lastIndexOf(".")));  
            // -----------------  
            System.out.println("Usage:");  
            System.out.println("解压:java ZipFileUtils -unzip fileName.zip");  
            System.out.println();  
        }  
     public static String unZip(String unZipFileName, String destFileName)  
        {  
            File unzipFile = new File(unZipFileName);  
      
            if(destFileName == null || destFileName.trim().length() == 0)  
            {  
                destFileName = unzipFile.getParent();  
            }  
      
            File destFile;  
            ZipFile zipFile = null;  
            try  
            {  
                zipFile = new ZipFile(unzipFile, "GBK");  
                for(Enumeration entries = zipFile.getEntries(); entries.hasMoreElements();)  
                {  
                    ZipEntry entry = (ZipEntry) entries.nextElement();  
                    destFile = new File(destFileName, entry.getName());  
      
                    unZipFile(destFile, zipFile, entry); //执行解压  
                }  
            } catch(Exception e)  
            {  
                return e.getMessage();  
            }  
            finally  
            {  
                try  
                {  
                    assert zipFile != null;  
                    zipFile.close();  
                } catch(Exception e)  
                {  
                    e.printStackTrace();
                }  
            }  
            return null;  
        }  
     private static void unZipFile(File destFile, ZipFile zipFile, ZipEntry entry)  
            throws IOException  
        {  
            InputStream inputStream;  
            FileOutputStream fileOut;  
            if(entry.isDirectory()) //是目录,则创建之  
            {  
                destFile.mkdirs();  
            }  
            else //是文件  
            {  
                //如果指定文件的父目录不存在,则创建之.  
                File parent = destFile.getParentFile();  
                if(parent != null && !parent.exists())  
                {  
                    parent.mkdirs();  
                }  
      
                inputStream = zipFile.getInputStream(entry);  
      
                fileOut = new FileOutputStream(destFile);  
                byte[] buf = new byte[bufSize];  
                int readedBytes;  
                while((readedBytes = inputStream.read(buf)) > 0)  
                {  
                    fileOut.write(buf, 0, readedBytes);  
                }  
                fileOut.close();  
      
                inputStream.close();  
            }  
        } 
    }     
    解压.TAR.Z文件
    所需jar包 commons-compress-1.7及以上
    package app.qdupr.Method;
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
    import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
    import org.apache.commons.compress.compressors.z.ZCompressorInputStream;
    /**
     * 自动解压.Z格式的文件
     * @author Administrator
     *
     */
     
    public class ZCompress {
     
    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args) {
    ZCompress zip = new ZCompress();
      File dir = new File("E:\Test");
      File[] subs = dir.listFiles();
      for (File sub : subs) {
      
      String file=sub.getParent()+File.separator+sub.getName();
      zip.uncompress(file);
          System.out.println(file);
       }
    }
     
     
    /**
     * 获取文件夹下全部文件
     * @param file
     */
    public static void findAllfile(String file) {
    ZCompress zip = new ZCompress();
      File dir = new File(file);
      File[] subs = dir.listFiles();
      for (File sub : subs) {
      String newfile=sub.getParent()+File.separator+sub.getName();
      zip.uncompress(newfile);
       }
    }
    /**
     * .Z文件解压
     * @param file
     */
    public  void  uncompress(String file) {
    //File file =new File("E:\BEA20151101.Z");
    ZCompress.deCompressTZFile(file);
    }
    /**
     * 将String型转换为File类型
     * @param file
     * @return
     */
    public static File deCompressTZFile(String file) {
    return deCompressZFile(new File(file));
    }
    /**
     * 执行解压
     * @param file
     * @return
     */
    private static File deCompressZFile(File file) {
    int buffersize = 2048;
    FileOutputStream out = null;
    ZCompressorInputStream zIn = null;
    try {
    FileInputStream fin = new FileInputStream(file);
    BufferedInputStream in = new BufferedInputStream(fin);
    //解压后的文件存放路径及文件名
    String  name = file.getName().substring(0, file.getName().indexOf("."));
    File outFile = new File("E:\File\"+name);
    out = new FileOutputStream(outFile);
    zIn = new ZCompressorInputStream(in);
    final byte[] buffer = new byte[buffersize];
    int n = 0;
    while (-1 != (n = zIn.read(buffer))) {
    out.write(buffer, 0, n);
    }
    return outFile;
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    } finally {
    try {
    out.close();
    zIn.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
     
    /**
     * .TAR格式文件解压
     * @param file
     */
    private static void deCompressTARFile(File file) {
    int buffersize = 2048;
    String basePath = file.getParent() + File.separator;
    TarArchiveInputStream is = null;
    try {
    is = new TarArchiveInputStream(new FileInputStream(file));
    while (true) {
    TarArchiveEntry entry = is.getNextTarEntry();
    if (entry == null) {
    break;
    }
    if (entry.isDirectory()) {// 这里貌似不会运行到,跟ZipEntry有点不一样
    new File(basePath + entry.getName()).mkdirs();
    } else {
    FileOutputStream os = null;
    try {
    File f = new File(basePath + entry.getName());
    if (!f.getParentFile().exists()) {
    f.getParentFile().mkdirs();
    }
    if (!f.exists()) {
    f.createNewFile();
    }
    os = new FileOutputStream(f);
    byte[] bs = new byte[buffersize];
    int len = -1;
    while ((len = is.read(bs)) != -1) {
    os.write(bs, 0, len);
    }
    os.flush();
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    os.close();
    }
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    is.close();
    file.delete();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
     
    }
     
    }
  • 相关阅读:
    github设置添加SSH
    利用ForgeryPy生成虚拟数据
    使用python的email、smtplib、poplib模块收发邮件
    charles系列破解激活办法(最高charles4.2.5都可以激活,亲测可用)
    percona-toolkit 之 【pt-online-schema-change】说明
    针对跑MySQL的Linux优化【转】
    MySQL 利用SQL线程对Binlog操作
    MySQL 四种事务隔离级的说明
    Innodb锁机制:Next-Key Lock 浅谈
    INNODB自增主键的一些问题
  • 原文地址:https://www.cnblogs.com/w821759016/p/6210818.html
Copyright © 2011-2022 走看看