JAVA 解压tar.gz格式文件 ,亲测有效,因为tar.gz 是多用于Linux 系统下的压缩方式,而且是有两层加压,先把文件压缩成tar包,再把tar文件 压缩成gz 格式,网上相关的资料和方法都很少,更多地都是一些linux系统下面的命令,效率待提高 ,但可用
解压方法:
package unjargz.core.data;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
public class Unjar {
private BufferedOutputStream bufferedOutputStream;
String zipfileName = null;
public Unjar(String fileName) {
this.zipfileName = fileName;
}
public static void unTargzFile(String rarFileName, String destDir) {
Unjar gzip = new Unjar(rarFileName);
String outputDirectory = destDir;
File file = new File(outputDirectory);
if (!file.exists()) {
file.mkdir();
}
gzip.unzipOarFile(outputDirectory);
}
public void unzipOarFile(String outputDirectory) {
FileInputStream fis = null;
ArchiveInputStream in = null;
BufferedInputStream bufferedInputStream = null;
try {
fis = new FileInputStream(zipfileName);
GZIPInputStream is = new GZIPInputStream(new BufferedInputStream(
fis));
in = new ArchiveStreamFactory().createArchiveInputStream("tar", is);
bufferedInputStream = new BufferedInputStream(in);
TarArchiveEntry entry = (TarArchiveEntry) in.getNextEntry();
System.out.println("开始解压:");
while (entry != null) {
System.out.print(">");
String name = entry.getName();
String[] names = name.split("/");
String fileName = outputDirectory;
for(int i = 0;i
String str = names[i];
fileName = fileName + File.separator + str;
}
if (name.endsWith("/")) {
mkFolder(fileName);
} else {
File file = mkFile(fileName);
bufferedOutputStream = new BufferedOutputStream(
new FileOutputStream(file));
int b;
while ((b = bufferedInputStream.read()) != -1) {
bufferedOutputStream.write(b);
}
bufferedOutputStream.flush();
bufferedOutputStream.close();
}
entry = (TarArchiveEntry) in.getNextEntry();
}
System.out.println("解压完成 !");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ArchiveException e) {
e.printStackTrace();
} finally {
try {
if (bufferedInputStream != null) {
bufferedInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void mkFolder(String fileName) {
File f = new File(fileName);
if (!f.exists()) {
f.mkdir();
}
}
private File mkFile(String fileName) {
File f = new File(fileName);
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
return f;
}
}
主函数:
package unjargz.core.data;
import java.io.File;
public class properties {
@SuppressWarnings("static-access")
public static void main(String[] args) throws Exception {
String path = "d:\\HW_20161217.tar.gz";
String pt=path.substring(3,5);
String year=path.substring(6,10);
String month=path.substring(10,12);
String day=path.substring(12,14);
System.out.println(pt);
System.out.println(year);
System.out.println(month);
System.out.println(day);
String untargzpath = "d:\"+pt+"\"+year+"\"+month+"\"+day+"\";
File file = new File(untargzpath);
if(!file.exists())
file.mkdirs();
Unjar unjar = new Unjar(path);
unjar.unTargzFile(path, untargzpath);
}
}