java解析CSV文件(zipFiles 打成压缩包 exportObeEventDataExcel 前端页面响应)
JAR包及代码17:39:09
<!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.2</version>
</dependency>


package mocha.framework.utils; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; public class CSVUtil {
private static final Logger log = Logger.getLogger(CSVUtil.class);
private static final String filepath = GetProperty.getSfpt("/init.properties", "downloadurl");
public static File createCSVFile(List<Map<String, Object>> exportData,
String outPutPath, String filename) { File csvFile = null;
BufferedWriter csvFileOutputStream = null;
try {
csvFile = new File(outPutPath + filename + ".csv");
// csvFile.getParentFile().mkdir();
File parent = csvFile.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile(); // GB2312使正确读取分隔符","
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(csvFile), "UTF-8"), 1024);
/* new FileOutputStream(csvFile), "GB2312"), 1024);
*/ // 写入文件头部
Map<String, Object> map1 = exportData.get(0);
if (map1!=null && map1.size()>0) {
int num = map1.keySet().size();
int j = 0;
for (String key : map1.keySet()) {
// 第六步,创建单元格,并设置值
csvFileOutputStream.write("\""
+ key.toString() + "\"");
++j;
if (j!=num) {
csvFileOutputStream.write(",");
}
}
}
csvFileOutputStream.newLine();
// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
// Object row = (Object) iterator.next();
LinkedHashMap row = (LinkedHashMap) iterator.next();
System.out.println(row); for (Iterator propertyIterator = row.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();
// System.out.println( BeanUtils.getProperty(row, propertyEntry.getKey().toString()));
csvFileOutputStream.write("\""
+ propertyEntry.getValue().toString() + "\"");
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
if (iterator.hasNext()) {
csvFileOutputStream.newLine();
}
}
csvFileOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
} /*************************************************************
生成单个CSV文件的方法
*************************************************************/
/*
* List<Map<String, Object>> Map里面为 表头 数据 例:Map<"姓名","张三">
* filename 文件名
*/
public static String createCSVFileUrl(List<Map<String, Object>> exportData,
String filename) {
log.info("开始生成csv文件");
File csvFile = null;
String PATH = "";
FileOutputStream fos = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
BufferedWriter csvFileOutputStream = null;
try {
//filepath 文件路径 :本地就写 C://Users//A//Downloads// 服务器就写:/app/file/
PATH = filepath + filename + ".csv";
fos = new FileOutputStream(PATH);
//追加BOM标识 不加会导致office低版本打开乱码
fos.write(0xef);
fos.write(0xbb);
fos.write(0xbf);
osw = new OutputStreamWriter(fos, "UTF-8");
csvFileOutputStream = new BufferedWriter(osw);
csvFile = new File(PATH);
File parent = csvFile.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile();
log.info(PATH);
// GB2312使正确读取分隔符","
/*csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(csvFile), "UTF-8"), 1024);
csvFileOutputStream.write(0xef);
csvFileOutputStream.write(0xbb);
csvFileOutputStream.write(0xbf);*/
// 写入文件头部
Map<String, Object> map1 = exportData.get(0);
if (map1!=null && map1.size()>0) {
int num = map1.keySet().size();
int j = 0;
for (String key : map1.keySet()) {
// 第六步,创建单元格,并设置值
csvFileOutputStream.write("\""+ key.toString() + "\"");
++j;
if (j!=num) {
csvFileOutputStream.write(",");
}
}
}
csvFileOutputStream.newLine();
// int i = 0 ;
// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
// Object row = (Object) iterator.next();
LinkedHashMap row = (LinkedHashMap) iterator.next();
// i++;
//System.out.println(row);
// if (i%10000 == 0) {
// System.out.println("正在写第"+i+"条数据!");
// }
for (Iterator propertyIterator = row.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();
// System.out.println( BeanUtils.getProperty(row, propertyEntry.getKey().toString()));
csvFileOutputStream.write("\""
+ propertyEntry.getValue().toString() + "\"");
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
if (iterator.hasNext()) {
csvFileOutputStream.newLine();
}
}
csvFileOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("生成csv文件结束");
//exportObeEventDataExcel(response,csvFile);
// List<String> list = new ArrayList<String>();
// list.add(filepath + filename + ".csv");
// try {
// zipFiles(list,filepath+"csv.zip",response);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// if (csvFile.exists() && csvFile.isFile())
// {
// csvFile.delete();
// }
//返回的是文件的保存地址
return PATH;
}
/*
* 页面响应方法
* */
public static String exportObeEventDataExcel(HttpServletResponse response,File csvFile){
try {
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(csvFile));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(
csvFile.getName(), "UTF-8"));
response.addHeader("Content-Length", "" + csvFile.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream"); //toClient.write(new byte []{(byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });
toClient.write(buffer);
toClient.flush();
toClient.close();
return "成功";
} catch (IOException e) {
String message = "export ObeEvent Data Excel failed . ";
log.error(message, e);
return "失败";
}
}
/*
* 页面ZIP响应方法,其实和上面一样
*/
public static String exportObeEventDataExcelZip(HttpServletResponse response,File csvFile){
try {
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(csvFile));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(
csvFile.getName(), "UTF-8"));
response.addHeader("Content-Length", "" + csvFile.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
//toClient.write(new byte []{(byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });
toClient.write(buffer);
toClient.flush();
toClient.close();
return "成功";
} catch (IOException e) {
String message = "export ObeEvent Data Excel failed . ";
log.error(message, e);
return "失败";
}
} /**
* @param fileRealPathList 待压缩的文件列表
* @param zipFileRealPath 压缩后的文件名称
* @return boolean
* @throws :Exception
* @Function: zipFiles
* @Description:多个文件的ZIP压缩
*/
public static void zipFiles(List<String> fileRealPathList, String zipFileRealPath,
HttpServletResponse response)
throws IOException
{
FileOutputStream out = null;
ZipOutputStream zipOut = null;
String path = filepath+zipFileRealPath+".zip";
try
{
// 根据文件路径构造一个文件实例
File zipFile = new File(path);
// 判断目前文件是否存在,如果不存在,则新建一个
if (!zipFile.exists())
{
zipFile.createNewFile();
}
// 根据文件路径构造一个文件输出流
out = new FileOutputStream(path);
// 传入文件输出流对象,创建ZIP数据输出流对象
zipOut = new ZipOutputStream(out);
// 循环待压缩的文件列表
for (String fileRealPath : fileRealPathList)
{
FileInputStream in = null;
try
{
File file = new File(fileRealPath);
if (!file.exists())
{
log.error("文件不存在");
throw new FileNotFoundException("文件不存在");
} // 创建文件输入流对象
in = new FileInputStream(fileRealPath);
// 得到当前文件的文件名称
//判断操作系统
String separateCharacter = "";
String os = System.getProperty("os.name");
if (os.toLowerCase().startsWith("win"))
{
//windows操作系统
separateCharacter = "//";
}
else
{
//非windows操作系统
separateCharacter = "/";
}
String fileName = fileRealPath.substring(
fileRealPath.lastIndexOf(separateCharacter) + 1, fileRealPath.length());
// 创建指向压缩原始文件的入口
ZipEntry entry = new ZipEntry(fileName);
zipOut.putNextEntry(entry);
// 向压缩文件中输出数据
int nNumber = 0;
byte[] buffer = new byte[512];
while ((nNumber = in.read(buffer)) != -1)
{
zipOut.write(buffer, 0, nNumber);
}
}
catch (IOException e)
{
log.error("文件压缩异常-in,原因:", e);
throw new IOException("文件压缩异常");
}
finally
{
// 关闭创建的流对象
if (null != in)
{
in.close();
}
}
}
}
catch (IOException e)
{
log.error("文件压缩异常-out,原因:", e);
throw new IOException("文件压缩异常");
}
finally
{
if (null != zipOut)
{
zipOut.close();
}
if (null != out)
{
out.close();
}
}
File fiel = new File(path);
//调用导出到前端的方法
exportObeEventDataExcelZip(response,fiel);
//删除本地压缩包
if (fiel.exists() && fiel.isFile())
{
fiel.delete();
}
//删除其他文件
for (String string : fileRealPathList) {
File fiel1 = new File(string);
//删除本地压缩包
if (fiel1.exists() && fiel1.isFile())
{
fiel1.delete();
}
}
}
public static void main(String[] args) {
List exportData = new ArrayList<Map>();
Map row1 = new LinkedHashMap<String, String>();
row1.put("11", "11");
row1.put("21", "12");
row1.put("31", "13");
row1.put("41", "14");
exportData.add(row1);
row1 = new LinkedHashMap<String, String>();
row1.put("11", "21");
row1.put("2", "22");
row1.put("31", "23");
row1.put("4", "24");
exportData.add(row1);
List propertyNames = new ArrayList();
CSVUtil.createCSVFile(exportData, "C:\\Users\\A\\Downloads\\", "导出CSV文件");
}
}
java解析CSV文件(zipFiles 打成压缩包 exportObeEventDataExcel 前端页面响应)的更多相关文章
- 如何用Java解析CSV文件
首先看一下csv文件的规则: csv(Comma Separate Values)文件即逗号分隔符文件,它是一种文本文件,可以直接以文本打开,以逗号分隔.windows默认用excel打开.它的格式包 ...
- POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解
http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...
- java opencsv解析csv文件
记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...
- php解析.csv文件
public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...
- Java生成CSV文件实例详解
本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...
- java解析xml文件并输出
使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...
- java读取CSV文件添加到sqlserver数据库
在直接将CSV文件导入sqlserver数据库时出现了错误,原因还未找到,初步怀疑是数据中含有特殊字符.于是只能用代码导数据了. java读取CSV文件的代码如下: package experimen ...
- 使用Java解析XML文件或XML字符串的例子
转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...
- selenium java读取csv文件 (数据驱动)
javacsv2.1 下载地址:http://sourceforge.net/projects/javacsv/files/ 该链接可以下载java读取csv文件的jar 包.下载之后解压找到对应的. ...
- [cocos2dx utils] cocos2dx读取,解析csv文件
在我们的游戏中,经常需要将策划的数值配置成csv文件,所以解析csv文件就是一个很common的logic, 例如如下csv文件: 下面是一个基于cocos2dx 2.2.4的实现类: #ifndef ...
随机推荐
- oracle数据对比--用户,索引,分区,dblink,同义词,视图
问题描述:需要对比用户数据一般在数据库迁移之后,需要对比一下两个库之间的差距,如果登上去一条命令的执行,去统计,就会比较麻烦,这里整理了一些脚本可用.通过创建dblink的方式快速查询,也可以整合到一 ...
- sql lag函数
lag https://spark.apache.org/docs/latest/api/sql/#lag lag(input[, offset[, default]]) OVER (PARTITIO ...
- sql求每家店铺销量前三的sku, 附python解法
背景 有一张表: date store_id sku sales 2023-01-01 CK005 03045 50 date 代表交易日期,store_id代表门店编号,sku代表商品,sales代 ...
- 微信小程序隐藏页面滚动条
开发小程序时,经常会碰到页面长度超过屏幕高度,然后下拉时会出现滚动条,对于一些有强迫症的人来说是不可忍受的. 网上看了好多,写的.都评论有起作用或者不起作用的. 我在这分享一个全局隐藏滚动条的方式. ...
- java跨越解决
1.配置文件解决跨域 使用Filter方式进行设置 @Slf4j @Component public class CorsFilter implements Filter { @Override pu ...
- SDK日志上传性能优化
问题描述 在SDK初始化时,会在init方法中开启一个倒计时,在5s倒计时结束后使用子线程将本地保存的历史日志信息上传到后台. 因业务需要,在日志在发送上传前,对日志数据上传时需要对日志数据做编码和特 ...
- 2020-09-01:mysql里什么是检查点、保存点和中间点?
福哥答案2020-09-01: 检查点checkpoint:批量刷盘.在一定程度上代表了刷到磁盘时日志所处的日志序列号(LSN)位置.标记重做日志中已经完成刷到磁盘的位置点,如果缓冲池中有很多重做日志 ...
- 2021-09-10:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案
2021-09-10:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案, ...
- Django-管理员用户的创建
命令:python manage.py createsuperuser python manage.py createsuperuser Type 'manage.py help' for usage ...
- Django context must be a dict rather than UserProfile.
context must be a dict rather than UserProfile. # 主页@login_requireddef index(request): data={} data ...