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();
}
}
JAVA-将内容写入文件并导出到压缩包的更多相关文章
- java 将内容写入文件 txt
@Test //将内容写入文件 public void xieru() throws Exception{ FileWriter fileWriter=new FileWriter("d:\ ...
- C#异步将文本内容写入文件
在C#/.NET中,将文本内容写入文件最简单的方法是调用 File.WriteAllText() 方法,但这个方法没有异步的实现,要想用异步,只能改用有些复杂的 FileStream.WriteAsy ...
- Java将字符串写入文件与将文件内容读取到字符串
原文:http://blog.csdn.net/liuweiyuxiang/article/details/69487326 将字符串写入文件 方法一 public void WriteStringT ...
- java 按内容拆分文件
文件内容为: BC************* **************** *************** BC************* **************** *********** ...
- Java使用FileOutputStream写入文件
From: http://beginnersbook.com/2014/01/how-to-write-to-a-file-in-java-using-fileoutputstream/ /* 使用F ...
- Java压缩多个文件并导出
controller层: /** * 打包压缩下载文件 */ @RequestMapping(value = "/downLoadZipFile") public void dow ...
- JAVA实用案例之文件导入导出(POI方式)
1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...
- IOS应用发布NSLog的注释及使用重定向,把控制台内容写入文件
1 选择工程的Target -> Build Settings -> Preprocessor Macros. 如图,默认 Debug项,是“DEBUG=1”. 2 在程序中设置全局宏定义 ...
- Java将对象写入文件读出——序列化与反序列化
Java类中对象的序列化工作是通过ObjectOutputStream和ObjectInputStream来完成的. 写入: File aFile=new File("e:\\c.txt&q ...
随机推荐
- Angular build Error:In this configuration Angular requires Zone.js
Angular cli 运行 build后打开生成的index.html报错:In this configuration Angular requires Zone.js 生成代码如下: ng bui ...
- linux 的计划任务 定时任务
linux的计划任务,也叫做定时任务 https://www.cnblogs.com/mingforyou/p/3930636.html 名字是crond 查看linux本机的定时任务 crontab ...
- MySQL 逻辑物理备份测试
目录 逻辑备份 mysqldump 普通备份 mysqlpump 并行备份 mysqlpump 压缩并行备份 mydumper 并行备份 mydumper 并行压缩备份 小结 物理备份 xtrabac ...
- iOS-IAP内购的那些事(iOS内购漏单的问题)
前言 说起内购,其实挺令开发者厌烦的,原因呢,先不说漏单的问题,首先苹果要扣除30%的销售额哦,可恨不?(我觉得可恨),有些想办法先隐藏掉第三方支付(支付宝.微信等),等项目上线了,再跳过内购使用第三 ...
- 线程中消费者生产者的实例代码(使用Lock类)
http://www.cnblogs.com/DreamDrive/p/6192685.html 这个是用synchronized关键字实现的. Lock可以替换synchronized. 上面用来做 ...
- WebFlux基础之响应式编程
上篇文章,我们简单的了解了WebFlux的一些基础与背景,并通过示例来写了一个demo.我们知道WebFlux是响应式的web框架,其特点之一就是可以通过函数式编程方式配置route.另外究竟什么是响 ...
- Android四大组件之---activity生命周期详解
废话不多说, 先来一张Google提供的一张经典的生命周期流程图: 有的朋友可能看英文的有点费劲,再提供一张中文版的 O(∩_∩)O 相信已经很多人对这张图再熟悉不过了,下面笔者按照自己的理解并结合 ...
- PLSQL Developer是什么?
不多说,直接上干货! PLSQL Developer是一款可以帮助用户管理Oracle数据库开发存储程序单元的集成开发环境IDE,通过该软件,用户可以编辑.编译.纠正.测试.调试.优化.查询您的数据信 ...
- 基于HA机制的MyCat架构——配置HAProxy
HAProxy简介HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站 ...
- poi导出联动下拉选择的excel
最近碰到一个功能, 觉得可以记录下来. 在web中, 经常会碰到上下级的数据, 或者是联动数据, 比如省市联动. 那么在导入数据的时候, 是否可以在动态生成的模板中, 加入联动限制呢. 一. 数据准备 ...