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 ...
随机推荐
- 如何训练个人的ChatGpt4
如何在自己的计算机上安装类似 ChatGPT 的个人 AI 并在没有互联网的情况下运行它 本文旨在为任何人安装此软件.最初它有一个视频,伴随着操作方法,但是事情变化很快,我的三次尝试只是推迟了我发表这 ...
- 【Spring注解驱动】(三)Servlet 3.0
前言 今天是7.21日,终于是看完了..暑假在家学习是真的差点意思 1 Servlet 3.0简介 Servlet 2.0是在web.xml中配置servlet filter.listener.Dis ...
- 【Vue】三
Vue组件 非单文件组件 一个文件包含多个组件 单文件组件 一个文件只包含一个组件,vue文件初始化:vueInit <template lang=""> <di ...
- Vue2的组件中data为什么不能使用对象
当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例. 如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供 data 函数 ...
- 真实场景sql优化持续更新(老司机必备)
概述 下述场景,均来自实际产品线上经验,出于保密考量,所有需求场景都是仿造的,模拟遇到过的真实场景. 场景一: 统计数据(Order by 不具备唯一性导致的分页数据混乱) 需求 在实际业务场景中,我 ...
- Python 列表的修改、添加和删除元素
列表修改.添加和删除元素 大多数创建的列表都是动态的,随程序的运行增删元素 修改列表元素 指定列表名和要修改的元素的索引,再指定要修改元素的新值 # 修改列表元素案例 motorcycles = [' ...
- 【Javascript】Array 数组对象
一.数组介绍 数组是一种复合数据类型 在数组可以存储多个不同类型的数据,任何类型的值都可以成为数组中的元素 创建数组时尽量要确保数组中存储的数据的类型是相同的 数组中存储的是有序的数据 数组中的每个数 ...
- 2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下
2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下 : 1 i == 1时,V[i] = 1: 2 i > 1时,如果S[i] ! ...
- 2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个。 返回有没有
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个. 返回 ...
- HTML5网页游戏开发
HTML概述 互联网上的应用程序被称为Web应用程序,web应用程序使用Web文档(网页)来表示用户界面,Web文档都遵循html格式,html5是最新的html标准 HTML基础 HTML是Hype ...