取出数据库表中的内容写入到文件,并将所有文件写入到压缩包最终导出到指定的某目录下
        //导出的压缩包格式  xxxx_date
        Date currentTime = new Date();
        //格式化日期格式将yyyy-MM-dd HH:mm:ss 格式转换成xxxxxxxxx格式(去掉中间符号)
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
        String dateString = formatter.format(currentTime);
        //1.创建文件夹
        String usrHome = configBackPath;//获取到系统目录(configBackPath 是在配置文件中配置的一个路径,通过注入的方式获取)
   
    String path = usrHome + taskParams.getTaskPath()+ "\\";//创建的文件夹路径
path + (taskParams.getTaskPath()_该方式是从数据
        库中获取的用户自定义的路径,既配置路径+自定义路径)
        //在当前路径下配置文件夹
        File file = new File(path);
        //如果不存在则创建
        if(!file.exists()){
            file.mkdirs();
        }
        //声明文件格式
        File zipFile = null;
        //写入流
        FileInputStream fis = null; 
        //输出流       
        FileOutputStream fos = null; 
        //zip写入流
        ZipOutputStream zos = null; 
        try {
            //在此路径下创建压缩包,命名规则为,例:configbackup_20181030101232.tar.gz
            zipFile = new File(path +"configbackup_"+ dateString +".tar.gz"); 
            //执行创建
            zipFile.createNewFile();
            fos = new FileOutputStream(zipFile); 
            zos = new ZipOutputStream(fos);
            //定义两个布尔变量,用于判断前端勾选的命名规则1、2、3
            boolean isExistName = false, isExistDate = false;
            //获取数据库中保存的命名规则
            String namingRules = taskParams.getTaskFileFormat();
            String[] nameRanges = namingRules.split(",");
            //判断其是否被勾选
            for (String nameRange : nameRanges) {
                if("2".equals(nameRange)){
                    isExistName = true;
                }
                if("3".equals(nameRange)){
                    isExistDate = true;
                }
            }
            //configData是数据源,List,其中list中包含一个list
           for (int i = 0; i < configDatas.size(); i++) {
                //创建一个StringBuilder
               StringBuilder conName = new StringBuilder();
               //循环获取对象
               ConfigData data = configDatas.get(i);
                //循环对象中的list
               for (ConfigItem conItem : data.getConfigs()) {
                   //该赋值需求 默认命名规则1 + other
                    conName.append(data.getDeviceIp() + "_" + conItem.getName());
                       //如果规则2被选中
                       if(isExistName){
                        //将2添加到命名规则中
                       conName.append("_" + data.getDeviceName());
                       log.info("勾选了设备名称" + conName);
                   }
                   //如果勾选了3
                   if(isExistDate){
                       try {
                            //将3的命名规则添加到命名中,因为此时数据中存储的时间格式与需求不同,所以在此做一下转换
                           Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(data.getEndTimeStr());
                           String nowTime = new SimpleDateFormat("yyyyMMddHHmmss").format(date);
                           conName.append("_" + nowTime);
                           log.info("勾选了时间" + conName);
                       } catch (ParseException e) {
                            e.printStackTrace();
                       }
                   }
                   //获取最终命名的规则(此处以.txt命名,也可以其它方式命名)
                   String name = new String((conName).toString().getBytes("UTF-8"))+ ".txt";
                   log.info("最终命名" + name);
                   //创建ZIP实体,并添加进压缩包  
                   ZipEntry zipEntry = new ZipEntry(name); 
                   zos.putNextEntry(zipEntry); 
                   //读取待压缩的文件并写进压缩包里 
                   zos.write(conItem.getContent().getBytes("UTF-8"));
               }
           }
           //最终记得要关闭流
            zos.flush();
            zos.close();
        } catch (IOException e) {
            log.error(e);
            log.error("下载失败---->", e);
        } finally{
            try {
                if(fis != null){
                    fis.close();
                }
                if(fos != null){
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

JAVA-将内容写入文件并导出到压缩包的更多相关文章

  1. java 将内容写入文件 txt

    @Test //将内容写入文件 public void xieru() throws Exception{ FileWriter fileWriter=new FileWriter("d:\ ...

  2. C#异步将文本内容写入文件

    在C#/.NET中,将文本内容写入文件最简单的方法是调用 File.WriteAllText() 方法,但这个方法没有异步的实现,要想用异步,只能改用有些复杂的 FileStream.WriteAsy ...

  3. Java将字符串写入文件与将文件内容读取到字符串

    原文:http://blog.csdn.net/liuweiyuxiang/article/details/69487326 将字符串写入文件 方法一 public void WriteStringT ...

  4. java 按内容拆分文件

    文件内容为: BC************* **************** *************** BC************* **************** *********** ...

  5. Java使用FileOutputStream写入文件

    From: http://beginnersbook.com/2014/01/how-to-write-to-a-file-in-java-using-fileoutputstream/ /* 使用F ...

  6. Java压缩多个文件并导出

    controller层: /** * 打包压缩下载文件 */ @RequestMapping(value = "/downLoadZipFile") public void dow ...

  7. JAVA实用案例之文件导入导出(POI方式)

    1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...

  8. IOS应用发布NSLog的注释及使用重定向,把控制台内容写入文件

    1 选择工程的Target -> Build Settings -> Preprocessor Macros. 如图,默认 Debug项,是“DEBUG=1”. 2 在程序中设置全局宏定义 ...

  9. Java将对象写入文件读出——序列化与反序列化

    Java类中对象的序列化工作是通过ObjectOutputStream和ObjectInputStream来完成的. 写入: File aFile=new File("e:\\c.txt&q ...

随机推荐

  1. 数据导出之winfrom导出word(一)

    我们常会用winfrom程序开发小工具,使用dataGridView控件展示数据.同时,我们也会有将这些数据导出的需求. 本篇文章介绍了开发过程中遇到的问题. 一.引用组件 首先,需要在窗体程序中引用 ...

  2. 操作Checkbox标签

    在前端开发中,少不了对Checkbox的操作. 常用的的方法有2个:.is()和.prop()方法.前者是判断 checkbox的状态,选不是未选.而后者为checkbox设置一个值,可以设置chec ...

  3. 常用Java集合类总结

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 7.1.List(允许重复元素) ArrayList: 底层数据结构:Object[] 在查询(get).遍 ...

  4. jsp的两个include了解

    在jsp中三大指令(page --  include -- taglib)中有一个 include 然后再三个动作标签中(include -- forward -- param)中也有一个includ ...

  5. 堆排序(大顶堆、小顶堆)----C语言

    堆排序 之前的随笔写了栈(顺序栈.链式栈).队列(循环队列.链式队列).链表.二叉树,这次随笔来写堆 1.什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被 ...

  6. Smart/400开发上手1:入门

    1.介绍 Smart/400是在AS/400之上的开发平台,管理开发.运维的全生命周期. 2.设计基础 Introducing Fields Smart通过字段字典Field Dictionary来存 ...

  7. 原子操作--sync/atomic的用法

    golang 通过sync/atomic库来支持cpu和操作系统级别的原子操作.但是对要操作类型有如下要求 int32, int64,uint32, uint64,uintptr,unsafe包中的P ...

  8. Selenium3 + Python3自动化测试系列五——常用断言Assertion

    断言Assertion 验证应用程序的状态是否同所期望的一致. 常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选. selenium 提供了三种模式的断言:a ...

  9. Python 百度ai身份证接口案例

    调用百度Ai 完成一个学生信息录入的网页小案例 添加图片,身份证信息对号入座 官方文档中心:https://ai.baidu.com/docs#/OCR-API/7e4792c7 utils.py # ...

  10. Spring Boot启动流程

    基础准备 1,BeanPostProcessor:这个接口的作用在于对于新构造的实例可以做一些自定义的修改.比如如何构造.属性值的修改.构造器的选择等等 2,BeanFactoryPostProces ...