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
;
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
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();