最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
使用Java压缩文件打包tar.gz包代码示例
时间:2022-06-29 02:27:29 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下使用Java压缩文件打包tar.gz包代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1 添加 Maven 依赖
org.apache.commons commons-compress 1.12
2 打包核心代码
通过Apache compress工具打包思路大致如下:
①:创建一个FileOutputStream到输出文件(.tar.gz)文件。
②:创建一个GZIPOutputStream,用来包装FileOutputStream对象。
③:创建一个TarArchiveOutputStream,用来包装GZIPOutputStream对象。
④:接着,读取文件夹中的所有文件。
⑤:如果是目录,则将其添加到TarArchiveEntry。
⑥:如果是文件,依然将其添加到TarArchiveEntry中,然后还需将文件内容写入TarArchiveOutputStream中。
接下来,直接上代码:
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.zip.GZIPOutputStream;
/**
* @author 犬小哈 (公众号: 小哈学Java)
* @date 2019-07-15
* @time 16:15
* @discription
**/
public class TarUtils {
/**
* 压缩
* @param sourceFolder 指定打包的源目录
* @param tarGzPath 指定目标 tar 包的位置
* @return
* @throws IOException
*/
public static void compress(String sourceFolder, String tarGzPath) throws IOException {
createTarFile(sourceFolder, tarGzPath);
}
private static void createTarFile(String sourceFolder, String tarGzPath) {
TarArchiveOutputStream tarOs = null;
try {
// 创建一个 FileOutputStream 到输出文件(.tar.gz)
FileOutputStream fos = new FileOutputStream(tarGzPath);
// 创建一个 GZIPOutputStream,用来包装 FileOutputStream 对象
GZIPOutputStream gos = new GZIPOutputStream(new BufferedOutputStream(fos));
// 创建一个 TarArchiveOutputStream,用来包装 GZIPOutputStream 对象
tarOs = new TarArchiveOutputStream(gos);
// 若不设置此模式,当文件名超过 100 个字节时会抛出异常,异常大致如下:
// is too long ( > 100 bytes)
// 具体可参考官方文档: http://commons.apa*c**he.org/proper/commons-compress/tar.html#Long_File_Names
tarOs.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
addFilesToTarGZ(sourceFolder, "", tarOs);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
tarOs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void addFilesToTarGZ(String filePath, String parent, TarArchiveOutputStream tarArchive) throws IOException {
File file = new File(filePath);
// Create entry name relative to parent file path
String entryName = parent + file.getName();
// 添加 tar ArchiveEntry
tarArchive.putArchiveEntry(new TarArchiveEntry(file, entryName));
if (file.isFile()) {
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
// 写入文件
IOUtils.copy(bis, tarArchive);
tarArchive.closeArchiveEntry();
bis.close();
} else if (file.isDirectory()) {
// 因为是个文件夹,无需写入内容,关闭即可
tarArchive.closeArchiveEntry();
// 读取文件夹下所有文件
for (File f : file.listFiles()) {
// 递归
addFilesToTarGZ(f.getAbsolutePath(), entryName + File.separator, tarArchive);
}
}
}
public static void main(String[] args) throws IOException {
// 测试一波,将 filebeat-7.1.0-linux-x86_64 打包成名为 filebeat-7.1.0-linux-x86_64.tar.gz 的 tar 包
compress("/Users/a123123/Work/filebeat-7.1.0-linux-x86_64", "/Users/a123123/Work/tmp_files/filebeat-7.1.0-linux-x86_64.tar.gz");
}
}
接下来,执行main方法,测试一下效果,看看打包是否成功:
生成采集器tar.gz包成功后,业务组只需将tar.gz下载下来,并扔到指定服务器,解压运行即可完成采集任务啦~
相关文章
- 原神织月者的曙色武器介绍 10-29
- 寂静岭2重制版最善良的博伊成就攻略 10-29
- 寂静岭2重制版锡帽成就解锁攻略分享 10-29
- 寂静岭2重制版潜伏接近成就解锁攻略 10-29
- 寂静岭2重制版比雾更快成就解锁攻略 10-29
- 暗喻幻想:ReFantazio无敌面料理获取攻略 10-29
