今天就跟大家聊聊有关怎么在Java中使用tar.gz 包压缩文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.12</version> </dependency>
通过 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
方法,测试一下效果,看看打包是否成功:
Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是“char”。4、布尔类型,是表示逻辑值的基本数据类型。
看完上述内容,你们对怎么在Java中使用tar.gz 包压缩文件有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。