原文地址:https://www.oschina.net/code/snippet_1387007_38740
导入所需的jar包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
package com.qjzh.zhwg.modules.subsystem.util;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.apache.commons.io.IOUtils;
import java.io.*;
import java.util.logging.Logger;
/**
* Created by superman on 2014/9/16.
*/
public class TarBuilder {
private Logger logger = Logger.getLogger(getClass().getName());
private TarArchiveOutputStream tarArchiveOutputStream;
private File source;
private File dist;
private boolean deleteSource;
/**
* 将指定目录下的文件打成tar包
* @param srcDir 要压缩的目录
* @param distDir 输出目录
* @param tarName tar包的名称
* @param deleteSource 压缩后是否删除源文件
*/
public TarBuilder(String srcDir,String distDir,String tarName,boolean deleteSource){
source=new File(srcDir);
File file = new File(distDir);
if (!file.exists()) {
file.mkdirs();
}
dist = new File(distDir, tarName);
this.deleteSource=deleteSource;
if (source.exists()) {
try {
tarArchiveOutputStream = new TarArchiveOutputStream(new FileOutputStream(dist));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
public void build() {
action(source);
if (tarArchiveOutputStream != null) {
try {
tarArchiveOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void action(File file) {
if(tarArchiveOutputStream==null){
logger.severe(source.getName()+" not found.");
return;
}
if (file.isFile()) {
append(tarArchiveOutputStream,file);
}else if (file.isDirectory()) {
File[] files=file.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
action(f);
}
}
}
}
private void append(TarArchiveOutputStream tarArchiveOutputStream,File file){
InputStream is=null;
try {
is = new BufferedInputStream(new FileInputStream(file));
TarArchiveEntry entry = new TarArchiveEntry(file);
entry.setSize(file.length());
entry.setName(file.getAbsolutePath().substring(source.getAbsolutePath().length()+1));
tarArchiveOutputStream.putArchiveEntry(entry);
IOUtils.copy(is,tarArchiveOutputStream);
tarArchiveOutputStream.flush();
tarArchiveOutputStream.closeArchiveEntry();
} catch (Exception e) {
e.printStackTrace();
}finally {
IOUtils.closeQuietly(is);
if(deleteSource){
if(!file.delete()){
logger.warning("Delete source file "+file.getName()+" failed.");
}
}
}
}
public static void main(String[] args) {
TarBuilder tarBuilder = new TarBuilder("D:\\capture\\program\\40", "D:\\capture\\program\\tars", "40.tar",false);
tarBuilder.build();
}
}