最新下载
热门教程
- 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.apache.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下载下来,并扔到指定服务器,解压运行即可完成采集任务啦~
相关文章
- 《原神》5.2卡池抽取建议 11-14
- 《原神》5.2版本新怪物介绍 11-14
- 《原神》希诺宁增伤触发方法 11-14
- 《原神》循音觅奇活动入口 11-14
- 《原神》循音觅奇兑换码获取方法 11-14
- 《原神》花羽会活动飞行技巧介绍 11-14