1. 程式人生 > >JAVA-將內容寫入檔案並匯出到壓縮包

JAVA-將內容寫入檔案並匯出到壓縮包

取出資料庫表中的內容寫入到檔案,並將所有檔案寫入到壓縮包最終匯出到指定的某目錄下
        //匯出的壓縮包格式  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();
            }
        }