今天就跟大家聊聊有关怎么在Java中使用tar.gz 包压缩文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
如何通过 Java 打包文件?
2.1 添加 Maven 依赖
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.12</version></dependency>
2.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;public class TarUtils { 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基本数据类型有哪些
Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是“char”。4、布尔类型,是表示逻辑值的基本数据类型。
看完上述内容,你们对怎么在Java中使用tar.gz 包压缩文件有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。