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. CI框架调用第三方类库

    public function index() { //调用第三方类库 /* * 注意事项: * library 里面调用的名字首字母必须是 大写 * 使用它的方法时 使用小写 */ $this-&g ...

  2. 让SQL起飞(优化)

    最近博主看完了<SQL进阶教程>这本书,看完后给博主打开了SQL世界的新大门,对于 SQL 的理解不在局限于以前的常规用法.借用其他读者的评论, ❝ 读完醍醐灌顶,对SQL做到了知其然更能 ...

  3. 笔记:C++学习之旅---try语句和异常处理

        异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持,在C++语言中,异常处理包括:     *throw表达式(throw expression),异常检测部分使用throw表带是来 ...

  4. Pwn系列之Protostar靶场 Stack2题解

    (gdb) disass main Dump of assembler code for function main: 0x08048494 <main+0>: push ebp 0x08 ...

  5. 2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写。

    2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写. 答案2023-03-27: 这段代码实现了通 ...

  6. 2022-04-11:给定一个正数数组arr,其中每个值代表砖块长度, 所有砖块等高等宽,只有长度有区别, 每一层可以用1块或者2块砖来摆, 要求每一层的长度一样, 要求必须使用所有的砖块, 请问最多

    2022-04-11:给定一个正数数组arr,其中每个值代表砖块长度, 所有砖块等高等宽,只有长度有区别, 每一层可以用1块或者2块砖来摆, 要求每一层的长度一样, 要求必须使用所有的砖块, 请问最多 ...

  7. 2021-12-31:给定一个arr,里面的数字都是0~9, 你可以随意使用arr中的数字,哪怕打乱顺序也行, 请拼出一个能被3整除的,最大的数字,用str形式返回。 来自去哪儿网。

    2021-12-31:给定一个arr,里面的数字都是0~9, 你可以随意使用arr中的数字,哪怕打乱顺序也行, 请拼出一个能被3整除的,最大的数字,用str形式返回. 来自去哪儿网. 答案2021-1 ...

  8. SpringBoot 使用 Sa-Token 完成注解鉴权功能

    注解鉴权 -- 优雅的将鉴权与业务代码分离.本篇我们将介绍在 Sa-Token 中如何通过注解完成权限校验. Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证.权限认证.单点登 ...

  9. c#优雅高效的读取字节数组——不安全代码(1)

    在开发上位机的经历中,会有很多需要和下位机交互通信的场景,大多数都会定义一个和硬件的通信协议,最终在上位机代码中的形式其实就是符合通信协议的字节数组. 目录 场景 如何解析字节数组到类或结构体中 建立 ...

  10. 用token辅助 密码爆破

    第一步:打开皮卡丘,点击暴力破解,token防爆破,输入正确用户名,错误密码 BP拦截请求,点击皮卡丘Login,然后拦截后, 发送给Intruder 第二步: 爆破方式选择音叉方式,   & ...