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 前端页面响应)的更多相关文章

  1. 如何用Java解析CSV文件

    首先看一下csv文件的规则: csv(Comma Separate Values)文件即逗号分隔符文件,它是一种文本文件,可以直接以文本打开,以逗号分隔.windows默认用excel打开.它的格式包 ...

  2. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  3. java opencsv解析csv文件

    记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...

  4. php解析.csv文件

    public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...

  5. Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

  6. java解析xml文件并输出

    使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...

  7. java读取CSV文件添加到sqlserver数据库

    在直接将CSV文件导入sqlserver数据库时出现了错误,原因还未找到,初步怀疑是数据中含有特殊字符.于是只能用代码导数据了. java读取CSV文件的代码如下: package experimen ...

  8. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  9. selenium java读取csv文件 (数据驱动)

    javacsv2.1 下载地址:http://sourceforge.net/projects/javacsv/files/ 该链接可以下载java读取csv文件的jar 包.下载之后解压找到对应的. ...

  10. [cocos2dx utils] cocos2dx读取,解析csv文件

    在我们的游戏中,经常需要将策划的数值配置成csv文件,所以解析csv文件就是一个很common的logic, 例如如下csv文件: 下面是一个基于cocos2dx 2.2.4的实现类: #ifndef ...

随机推荐

  1. windows安装zabbix错误代码

    zabbix安装:windows安装zabbix客户端很多坑,设计到很多问题,常见的问题有安装完成防火墙没有关闭,zabbix服务端接收不到客户端的信息.zabbix在cmd中安装的时候报错误代码,安 ...

  2. 从零开始学Vue(一)—— Vue.js 入门

    概述 vue.js作为现在笔记热门的JS框架,使用比较简单易上手,也成为很多公司首选的JS框架. 但是对于初学者可能学起来有些麻烦,所以推出<从零开始学Vue>系列博客,本系列计划推出19 ...

  3. 服务器数据监控监控-Zabbix

    Zabbix下载 Zabbix Sources https://www.zabbix.com/download Zabbix安装介绍 Server端 1.安装开发软件包 yum -y groupins ...

  4. Java的对象克隆

    本节我们会讨论 Cloneable 接口,这个接口指示一个类提供了一个安全的 clone() 方法. Object 类提供的 clone() 方法是 "浅拷贝",并没有克隆对象中引 ...

  5. C# 组合键判断

    e.KeyboardDevice.Modifiers 同时按下了Ctrl + H键(H要最后按,因为判断了此次事件的e.Key)修饰键只能按下Ctrl,如果还同时按下了其他修饰键,则不会进入 1 pr ...

  6. MySQL如何获取binlog的开始时间和结束时间

    MySQL数据库恢复到指定时间点时,我们必须通过MySQL全备+MySQL增量备份(可选)+MySQL的二进制日志(binlog)进行重放来恢复到指定时间点,实际的生产环境中,可能一段时间内生成了多个 ...

  7. 文盘Rust —— rust连接oss | 京东云技术团队

    作者:京东科技 贾世闻 对象存储是云的基础组件之一,各大云厂商都有相关产品.这里跟大家介绍一下rust与对象存储交到的基本套路和其中的一些技巧. 基本连接 我们以 [S3 sdk]( https:// ...

  8. 2022-10-03:给定一个正数n,比如6 表示数轴上有 0,1,2,3,4,5,6 <0 或者 >6 的位置认为无法到达 给定两个数字x和y,0<= x,y <= n 表示小人一开始在x的位置,它

    2022-10-03:给定一个正数n,比如6 表示数轴上有 0,1,2,3,4,5,6 <0 或者 >6 的位置认为无法到达 给定两个数字x和y,0<= x,y <= n 表示 ...

  9. 2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返回false。 来自字节飞书团队。

    2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串. 如果是,返回true: 否则,返回false. 来自字节飞书团队. 答案 ...

  10. 2021-10-27:课程表。你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisi

    2021-10-27:课程表.你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 .在选修某些课程之前需要一些先修课程. 先修课程按数组 prerequisi ...