//CSVUtil.class为类名

private static final Logger log = Logger.getLogger(CSVUtil.class);

//filepath 可以为本地路径,也可以为服务器路径

private static final String filepath = "C://Users//A//Downloads//";

public static voidmain(String[] args) {

List exportData= new ArrayList();

Map row1= new LinkedHashMap();

row1.put("11", "11");

row1.put("21", "12");

row1.put("31", "13");

row1.put("41", "14");

exportData.add(row1);

row1= new LinkedHashMap();

row1.put("11", "21");

row1.put("2", "22");

row1.put("31", "23");

row1.put("4", "24");

exportData.add(row1);

List propertyNames= newArrayList();

LinkedHashMap map= newLinkedHashMap();

map.put("11", "第一列");

map.put("22", "第二列");

map.put("33", "第三列");//System.out.println(map.keySet().toString().replace("[", "").replace("]", ""));

map.put("54", "第四列");

CSVUtil.createCSVFile(exportData, map,"C:\\Users\\A\\Downloads\\", "导出CSV文件");

}public staticFile createCSVFile(List exportData, LinkedHashMap rowMapper,

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(newOutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024);//写入文件头部

for (Iterator propertyIterator =rowMapper.entrySet().iterator(); propertyIterator.hasNext();) {

java.util.Map.Entry propertyEntry=(java.util.Map.Entry) propertyIterator

.next();

csvFileOutputStream.write("\""

+ propertyEntry.getValue().toString() + "\"");if(propertyIterator.hasNext()) {

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();

}

}returncsvFile;

}

//导出到前端页面

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(buffer);

toClient.flush();

toClient.close();

return "成功";

} catch (IOException e) {

String message = "export ObeEvent Data Excel failed . ";

log.error(message, e);

return "失败";

}

}

//删除文件

if (csvFile.exists() && csvFile.isFile()){

csvFile.delete();

}

//上传文件,只返回文件名

public static String createCSVFileUrl(List>exportData,

String filename) {

log.info("开始生成csv文件");

File csvFile= null;

String PATH= "";

BufferedWriter csvFileOutputStream= null;try{

PATH= filepath + filename + ".csv";

csvFile= newFile(PATH);

File parent=csvFile.getParentFile();if (parent != null && !parent.exists()) {

parent.mkdirs();

}

csvFile.createNewFile();

log.info(PATH);//GB2312使正确读取分隔符","

csvFileOutputStream = new BufferedWriter(newOutputStreamWriter(new FileOutputStream(csvFile), "UTF-8"), 1024);//写入文件头部

Map 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 list = new ArrayList();//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();//}

returnPATH;

}

/***@paramfileRealPathList 待压缩的文件列表

*@paramzipFileRealPath 压缩后的文件名称

*@returnboolean

*@throws:Exception

* @Function: zipFiles

* @Description:多个文件的ZIP压缩*/

public static void zipFiles(ListfileRealPathList, String zipFileRealPath,

HttpServletResponse response)throwsIOException

{

FileOutputStream out= null;

ZipOutputStream zipOut= null;

String path= filepath+zipFileRealPath+".zip";try{//根据文件路径构造一个文件实例

File zipFile = newFile(path);//判断目前文件是否存在,如果不存在,则新建一个

if (!zipFile.exists())

{

zipFile.createNewFile();

}//根据文件路径构造一个文件输出流

out = newFileOutputStream(path);//传入文件输出流对象,创建ZIP数据输出流对象

zipOut = newZipOutputStream(out);//循环待压缩的文件列表

for(String fileRealPath : fileRealPathList)

{

FileInputStream in= null;try{

File file= newFile(fileRealPath);if (!file.exists())

{

log.error("文件不存在");throw new FileNotFoundException("文件不存在");

}//创建文件输入流对象

in = newFileInputStream(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 = newZipEntry(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= newFile(path);//调用导出到前端的方法

exportObeEventDataExcel(response,fiel);//删除本地压缩包

if (fiel.exists() &&fiel.isFile())

{

fiel.delete();

}//删除其他文件

for(String string : fileRealPathList) {

File fiel1= newFile(string);//删除本地压缩包

if (fiel1.exists() &&fiel1.isFile())

{

fiel1.delete();

}

}

}

java 解析csv_java解析CSV文件(getCsvData 解析CSV文件 zipFiles 打成压缩包 exportObeEventDataExcel 前端页面响应)...相关推荐

  1. 记录Zip4j压缩文件解压后文件显示异常

    场景:从金山云链接中读取文件流,将文件保存到本地,然后将本地文件压缩成zip包通过接口传给前端页面 现象:图片及word显示异常 原图: 解压后: 用到工具zip4j 直接上代码 第一步,从云链接中获 ...

  2. Java文件读写和CSV文件解析(读取csv文件的一列或若干列)

    文件类 Java 读文件流的知识不可少,先复习一下吧! OREACLE JDK8 DOCS 文件类是Java IO的一个对象,用于指定文件的相关信息,位置和名称信息.如txt文件,csv文件对Java ...

  3. java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...

    Super CSV是读取/解析,验证和映射CSV文件到POJO的绝佳选择! 我们(Super CSV团队)刚刚发布了一个新版本(您可以从SourceForge或Maven下载它). 读取CSV文件 以 ...

  4. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  5. INI文件快速解析java工具包

    FastIni 概述 相信大家都用过阿里的fastjson,它可以通过模板快速解析json字符串,也可以通过key快速获取json字符串中的值.通过模板类型快速解析json字符串是一个很好的想法,所以 ...

  6. java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区

    在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...

  7. 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] jsp中出错提示: The absolute uri: h ...

  8. java对xml文件的解析_Java对XML文件的解析

    XML简介 围绕XML涉及到四方面的技术: 1.数据定义Schema.DTD 2.数据解析DOM.SAX两种解析模型 3.样式风格XSTL,使用XSTL可以将XML文件中存放的内容按照指定的样式显示为 ...

  9. java 文件解析异常_java中异常的解析

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

最新文章

  1. linux如何添加默认路由表_Linux-如何添加路由表
  2. [置顶] ActivityGroup自我堆栈管理(复用现有activity)
  3. ASP.NET状态管理之三(隐藏域HiddenField)
  4. oracle ogg双向通步,使用ogg的Oracle-Oracle的双向复制
  5. python模拟手写_python-自己手写的贴吧爬虫
  6. PowerShell图形化编程2-快速入门
  7. Oracle学习:数值函数与转换函数
  8. MobileGestalt.h 头文件
  9. 如何多次读取request请求里的数据
  10. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装
  11. tortoisegit图标消失_TortoiseGit文件夹和文件图标不显示解决方法
  12. 【Google设计冲刺】一种适合于创新小组的协作方式
  13. Linux服务器管理神器-IPython
  14. Gridlayout
  15. 复旦大学网络认证linux,复旦大学校园网有线上网认证流程
  16. photoshop基础操作集合01
  17. mysql中的聚集索引(聚簇索引)、非聚集索引、稀疏索引、稠密索引
  18. PE文件学习系列二 DOS头分析
  19. excel怎样制作html,HTML_Excel/Access 97 网页制作速成,一、 利用Excel 97制作网页 - phpStudy...
  20. sql查询数据库表中重复数值

热门文章

  1. Bleve:来自Couchbase、基于Go语言的全文索引与检索库
  2. ASP.NET MVC 控制器激活(二)
  3. BCH涨幅超过146%,势必跟BTC争夺王位?
  4. API网关与zuul1.x与springcloud的三角关系
  5. C# 枚举中的位运算
  6. es6结构赋值--数组
  7. 在Oracle中IMP导入数据时,如何解决目标数据库字符不一致问题
  8. saltstack常用命令
  9. Hyper-v Server虚拟光纤通道
  10. 国外设计师眼中的原型工具Mockplus