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

}

}
时间: 2024-10-11 13:00:33

【转】JAVA解压.TAR.Z及.ZIP文件的相关文章

如何只解压TAR包或ZIP包里的某一个文件

zip 首先得查看你想要解压文件的路径: unzip -l unzip -v 查看好路径之后解压: unzip -p abc.zip aaa/bbb/ccc.txt -d /tmp 配注:向zip里添加文件: zip -m abc.zip abc.txt压缩时排除某个文件:zip -r abc.zip /abc -x /abc/lych.txt删除解压包里的某个文件:zip -d abc.zip lych.txt tar包 首先得查看你想要解压文件的路径: tar -tf tar -xvpf a

【java】 java 解压tar.gz读取内容

package com.xwolf.stat.util; import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compr

使用JAVA解压加密的中文ZIP压缩包

近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下. 该压缩包的特性: 使用标准的zip压缩格式(压缩算法没有深入探究) 压缩包中带有目录并且目录名称是中文 压缩时加了密码 因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包. 下面是解压的实现代码: 1 public class UnZip { 2 private final int BUFF_SIZE = 4096; 3 4 /* 5 获取ZIP文件中的文件名和目录名 6 */

ubuntu 解压 windows 生成的 zip 文件乱码问题

在windows上压缩的文件,是以系统默认编码中文来压缩文件.由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码. 有两种方式解决问题:(建议采用方法一) 1. 通过unzip行命令解压,指定字符集:(用GBK, GB18030也可以) unzip -O CP936 xxx.zip 有趣的是unzip的manual中并无这个选项的说明, unzip --help对这个参数有一行简单的说明,如下: -O CHARSET  specify a cha

powershell 用7-zip解压带密码的zip文件

#路径 $7zip_path = "C:\Program Files\7-Zip" #参数列表 $Arg = "x -p$zip_password_api $zipFile -o" + $foldername + " -y" #7-Zip命令 $7zip = $7zip_path + "\7z.exe" #解压ZIP文件 & $7zip $Arg.Split() 说明: $Arg = "x -p$passwo

tar只解压tar包中某个文件

如果tar包很大,而只想解压出其中某个文件.方法如下: 只想解压出Redis-1.972.tar 中的Changes文件,来查看有哪些更改. [[email protected] ~]# tar -tf Redis-1.972.tar Redis-1.972 Redis-1.972/README Redis-1.972/Changes Redis-1.972/LICENSE Redis-1.972/dist.ini Redis-1.972/META.yml Redis-1.972/MANIFES

Linux环境下解压超过4GB的zip文件

今天在Linux服务器中解压一个zip的压缩包,提示如下错误信息: [[email protected] ZIP_BCSA_COURSES]# unzip BCSA_MEDIAS_BAK_20161118.zip error: Zip file too big (greater than 4294959102 bytes) Archive: BCSA_MEDIAS_BAK_20161118.zip warning [BCSA_MEDIAS_BAK_20161118.zip]: 314500412

linux 打包 解压 tar zip tgz

.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------------------------------------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.t

Linux-压缩解压命令(gzip,zip,tar,bzip)

1.命令:gzip  (压缩文件) 压缩文件后缀.gz ps: gzip test.txt  结果:生成文件test.txt.gz,原文件test.txt消失. 注意:只能压缩文件,不能压缩目录,压缩后不保留 原始文件,压缩比大概1/5 解压命令:gunzip 2.命令:tar (打包压缩目录) 严格意义上来说此命令为“打包”命令,将目录打包成一个*.tar文件 语法:tar 选项 压缩后文件名 目录 压缩文件后缀:*.tar.gz 选项:[-zcvf] -c 打包 -v 显示详细信息 -f