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