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();
            }
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM