• 压缩

    •  思路

      •  准备输出流

        • FileOutputStream
        • BufferedOutputStream
        • TarOutputStream
        • GZIPOutputStream
      •  准备输入流  
        • FileInputStream
        • BufferedInputStream
      •  将文件打包为tar  
      •  在将打包后的tar文件压缩  
    •  代码

      

    /**
* @功能描述 压缩tar.gz 文件
* @param resourceList 源文件集合
* @param outPath 目标文件
* @return 返回压缩结果
* @throws Exception
*/
@PrintRunTime(function="压缩tar.gz文件")
public static void packet(List<File> resourceList, String outPath) throws Exception {
//1. 参数验证, 初始化输出路径
if(resourceList == null || resourceList.size() < 1 || !Verify.isEmpty(outPath)){
throw new ServiceException("文件压缩执行异常, 非法参数!");
}
long startTime = System.currentTimeMillis();
// 2. 迭代源文件集合, 将文件打包为Tar
try (FileOutputStream fileOutputStream = new FileOutputStream(outPath+".tmp");
BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutputStream);
TarOutputStream tarOutputStream = new TarOutputStream(bufferedOutput);) {
for (File resourceFile : resourceList) {
if(!resourceFile.isFile()){
continue;
}
try(FileInputStream fileInputStream = new FileInputStream(resourceFile);
BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream);){
TarEntry entry = new TarEntry(new File(resourceFile.getName()));
entry.setSize(resourceFile.length());
tarOutputStream.putNextEntry(entry);
IOUtils.copy(bufferedInput, tarOutputStream);
} catch (Exception e) {
throw new ServiceException("文件["+resourceFile+"]压缩执行异常, 嵌套异常: \n" + e.toString());
}finally {
tarOutputStream.closeEntry();
}
}
} catch (Exception e) {
Files.delete(Paths.get(outPath+".tmp"));
throw new ServiceException("文件压缩至["+outPath+"]执行异常, 嵌套异常: \n" + e.toString());
}
//3. 读取打包好的Tar临时文件文件, 使用GZIP方式压缩
try (FileInputStream fileInputStream = new FileInputStream(outPath+".tmp");
BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream);
FileOutputStream fileOutputStream = new FileOutputStream(outPath);
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(fileOutputStream);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(gzipOutputStream);
) {
byte[] cache = new byte[1024];
for (int index = bufferedInput.read(cache); index != -1; index = bufferedInput.read(cache)) {
bufferedOutput.write(cache,0,index);
}
long endTime = System.currentTimeMillis();
Log.info("文件["+outPath+"]压缩执行完毕, 耗时:" + (endTime - startTime) + "ms");
} catch (Exception e) {
throw new ServiceException("文件压缩至["+outPath+"]执行异常, 嵌套异常: \n" + e.toString());
}finally {
Files.delete(Paths.get(outPath+".tmp"));
}
}
  • 解压

    •   思路

      •  准备输入流

        •  FileInputStream
        •  BufferedInputStream
        •  GZIPInputStream
        •  TarInputStream
      •  准备输出流
        •  FileOutputStream
      •  将文件转换为TarInputStream流对象, 输出即可
    •   代码

          /**
      * @功能描述 解压tar.gz文件
      * @param targzFile tar.gz压缩文件
      * @param outPath 存放解压后文件的目录
      * @return 返回结果
      * @throws ServiceException
      */
      public static void unpack(File targzFile, String outPath) throws ServiceException {
      //1. 验证参数, 初始化输出路径
      if(targzFile == null || !targzFile.isFile() || !Verify.isEmpty(outPath) || PathHandler.initPath(outPath) == null){
      throw new ServiceException("文件解压缩执行异常, 非法参数!");
      }
      long startTime = System.currentTimeMillis();
      //2. 读取tar.gz文件转换为tar文件
      try (FileInputStream fileInputStream = new FileInputStream(targzFile);
      BufferedInputStream bins = new BufferedInputStream(fileInputStream);
      GZIPInputStream gzipInputStream = new GZIPInputStream(bins);
      TarInputStream tarIn = new TarInputStream(gzipInputStream, 1024 * 2)) {
      //3. 迭代tar文件集合, 解压文件
      for (TarEntry entry = tarIn.getNextEntry(); entry != null; entry = tarIn.getNextEntry()){
      File targetFileName = new File(outPath + "/" + entry.getName());
      IOUtils.copy(tarIn, new FileOutputStream(targetFileName));
      }
      long endTime = System.currentTimeMillis();
      Log.info("文件["+targzFile+"]解压执行完毕, 耗时:" + (endTime - startTime) + "ms");
      } catch (Exception e) {
      throw new ServiceException("[" + targzFile + "] 解压执行异常, " + e.toString());
      }
      }

Java将文本文件压缩为tar.gz的更多相关文章

  1. Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件

    项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统 ...

  2. java,maven工程打tar.gz包执行main方法

    一,需要在pom.xml文件添加plugin, 项目目录结构 <build> <plugins> <plugin> <artifactId>maven- ...

  3. Windows下将文件打包压缩成 .tar.gz格式

    1.下载 “7-ZIP”,安装完成后进入需要打包的文件夹 2. 右击选择“添加到压缩包” 3.压缩格式:tar 4. 得到.tar文件,将其打包 5. 压缩格式为:gzip 6. 得到tar.gz格式 ...

  4. 把linux文件夹压缩成tar.gz的命令

    解压 tar zxvf 文件名.tar.gz 压缩 tar zcvf software.tar.gz /usr/local/software

  5. 压缩文件tar.gz和zip之间的区别

    我们在开发的时候通常要先下载相关的软件或者是源码,或者是jar包.在下载东西的时候总是碰见后缀是.tar.gz和.zip的问题,搞不清楚是怎么回事,不晓得下载哪个文件才是对自己有用的.现在我知道了,其 ...

  6. Windows下压缩成tar.gz格式

    tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式,然而这种格式在windows并不多见,WinRAR.WinZip等主流压缩工具可以释放解开,却不 ...

  7. 如何将文件压缩成.tar.gz格式的文件

    1.下载“7-ZIP“这个软件 2.安装7-ZIP以后,直接在你想要打包的文件上点右键菜单,会有一个7-ZIP的子菜单栏,类似WinRAR和WinZIP的那种右键菜单.然后选“7-ZIP”->“ ...

  8. tar压缩文件 .tar.gz

    打包并压缩文件 tar -zcf ansible.tar.gz ansible/* z    gzip属性 c    建立压缩文件 f    指定文件名 v    显示过程 解压文件 tar xzf ...

  9. linux 文件打包压缩成.tar.gz

    tar czvf beian.drcluod.cn.20180509.tar.gz ./beian.drcloud.cn/*

随机推荐

  1. C#通过HttpListener实现HTTP监听

    代码: using NLog; using System; using System.Diagnostics; using System.IO; using System.Net; using Sys ...

  2. 利用BLCR加速android的启动(android4.2)

    BOSS要求提高安卓系统的启动速度,优化bootloader和kernel后,发现还是达不到要求,没办法才打起zygote的注意. ================================== ...

  3. Qt实现长文件名(字符串)在QLabel中自适应缩短

    一.应用场景简述 当在有限宽度的QLable中显示很长的文件名/字符串时,超出QLabel宽度部分将不会显示,此时采取缩短文件名策略(也可实现为字符串滚动动画)可以缓解这一问题.在实现这一想法的过程中 ...

  4. 在 Visual Studio中 将 Objective-C 编译为 C++

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  5. 设置windows2008系统缓存大小限制,解决服务器运行久了因物理内存耗尽出僵死(提升权限后,使用SetSystemFileCacheSize API函数,并将此做成了一个Service)

    声明: 找到服务器僵死的原因了,原因是虚拟内存设置小于物理内存. 只要虚拟内存设置为系统默认大小就不会出生僵死的现象了. 当时因为服务器内存48G,系统默认虚拟内存大小也是48G, 觉得太占硬盘空间, ...

  6. 插件化一(android)

    插件化设计概述(android) 一.             模块划分 Basic模块包括:初始化接口.插件加载接口.插件更新接口和埋点接口. a)         初始化接口:完成一些必要的初始化 ...

  7. [每天记录一个Bug]Cell中由于block加载网络请求产生的复用

    Bug 出现场景:   cell中使用加载图片的网络请求出现复用,截图如下:         复用原因:   Cell Model中只有一个用户的uid,所有用户相关信息:例如头像\名称\信息等是通过 ...

  8. pomelo使用中的常见问题

    1.端口被占用, 有进程没杀干净. 用 pomelo kill --force 命令清一下进程.

  9. Java Collection秋招复习

    抽象类和接口的区别 我们先来看一下抽象类 * @auther draymonder */ public abstract class AbstractClassTest { private int T ...

  10. 利用org.mybatis.generator生成实体类

    springboot+maven+mybatis+mysql 利用org.mybatis.generator生成实体类 1.添加pom依赖:   2.编写generatorConfig.xml文件 ( ...