java 解析压缩文件-gzip
程序员文章站
2024-02-29 09:41:52
...
package impl;
import inter.AbstractUnCompressService;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import org.apache.tools.tar.TarEntry;
import org.apache.tools.tar.TarInputStream;
/**
* This file is used to uncompress gz compress file
* @author Jacky.Dong
*
*/
public class GzUnCompressServiceImpl extends AbstractUnCompressService {
private static final String SUFFIX_TAR_GZ = ".tar.gz";
@Override
public void unCompressFolder(String folder) {
// TODO Auto-generated method stub
}
@Override
public void unCompressFile(String inputFilePath, String outputDir)
throws IOException {
File inputFile = new File(inputFilePath);
if (outputDir == null) {
outputDir = inputFile.getPath().replace(SUFFIX_TAR_GZ, "")
+ File.separator;
}
try {
// create a gzip input stream
TarInputStream tarIn = new TarInputStream(new GZIPInputStream(
new FileInputStream(inputFile)));
TarEntry entry = null;
while ((entry = tarIn.getNextEntry()) != null) {
// if entry is a directory ,we should create a new directory
if (entry.isDirectory()) {
createDirectory(outputDir, entry.getName());// 创建空目录
} else {
// if entry is a file ,we should add this file to related
// folder and write content to the file
File tmpFile = new File(outputDir + File.separator
+ entry.getName());
createDirectory(tmpFile.getParent() + File.separator, null);
OutputStream out = null;
try {
out = new FileOutputStream(tmpFile);
int length = 0;
byte[] b = new byte[BUFFEREDSIZE];
while ((length = tarIn.read(b)) != -1) {
out.write(b, 0, length);
}
} catch (IOException ex) {
throw ex;
} finally {
if (out != null)
out.close();
}
}
}
} catch (Exception ex) {
System.err.println(ex.toString());
}
}
}
上一篇: antd 单元格合并处理,分页也有效
下一篇: two pointers 双针法