java开发过程中遇到的csv文件生成和导出
2017-03-14 16:29
357 查看
首先要直达csv文件其实就是以逗号分隔的文本文件;那么我们要导出指定java对象的数据的时候该怎么样生成文件发送到指定邮箱或者是通过浏览器导出到本地;首先是文件的创建,方法如下:
//其中exportData参数表示的为要导出的数据对象集合,大多数情况来自数据库的查询
//outPutPath参数表示你要导出的文件路径
//fileName参数表示你要生成的csv文件的名字
public static File createCSVFile(List<CustomerReportingModel> exportData, String outPutPath, String fileName) { File csvFile = null; BufferedWriter csvFileOutputStream = null; try { File file = new File(outPutPath); if (!file.exists()) { file.mkdir(); } //定义文件名格式并创建 csvFile = new File(outPutPath,fileName+".csv"); System.out.println("csvFile:" + csvFile); // UTF-8使正确读取分隔符"," csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream( csvFile), "GBK"), 102400); System.out.println("csvFileOutputStream:" + csvFileOutputStream); // 写入文件头部 List<String> titleList = new ArrayList<>(); titleList.add("报备客户来源"); //导出文件第一行对应的名称 titleList.add("报备客户总数"); //导出文件第一行对应的名称 writerLine(csvFileOutputStream, titleList); csvFileOutputStream.append("\r\n"); // 写入文件内容 long numberForCam = 0; for (CustomerReportingModel customerReportingModel : exportData) { //customerReportingModel为导出的java对象 numberForCam++; List<String> csvLine = getCsvLine(customerReportingModel); writerLine(csvFileOutputStream, csvLine); csvFileOutputStream.append("\r\n"); if (numberForCam % 10000 == 0) { csvFileOutputStream.flush(); //防止内存溢出 } } csvFileOutputStream.flush(); //刷出数据到文件中 } catch (Exception e) { LOG.info("文件内容写入错误", e); } finally { try { if(csvFileOutputStream!=null){ csvFileOutputStream.close();} } catch (IOException e) { e.printStackTrace(); LOG.info("文件关闭错误", e); } } return csvFile; }
//上述静态方法用来生成csv文件
//writerLine方法用于对已有文件追加一行数据;
//bw参数表示写入文件的缓存区
//csvLine参数表示java对象属性对应的集合
private static void writerLine(BufferedWriter bw, List<String> csvLine) throws IOException { for (int i = 0; i < csvLine.size(); i++) { String line = csvLine.get(i); if (line == null) { line = ""; } bw.append(line).append(",");//通过,来分割不同的列显示 } } //将java对象中要导出的属性列生成一个list集合用于生成文件导出
//返回java对象生成的属性列集合 private static List<String> getCsvLine(CustomerReportingModel crm) { //保存数据的对象 List<String> csvLine = new ArrayList(); csvLine.add(crm.getSource()); //要导出的对象属性列 csvLine.add(crm.getTotalNumber()==null?"0":crm.getTotalNumber().toString());//要导出的对象属性列,并设置默认值 return csvLine; }
到此你的csv文件就生成完成了,如果你的outPutPath为本地,则通过数据库查询数据集合并将数据集和文件路径和文件名传递给上述方法即可在本地生成csv文件;
如果需要浏览器下载到本地,则通过下载请求去后台获取数据集合并将数据写入csv文件,返回给响应,则会默认下载到浏览器的默认下载地址;
对于浏览器地址栏下载的设置如下:
将outPutPath改为: HttpServletResponse response;并将文件写入请求头中,具体的设置如下;
response.setContentType("application/csv;charset=GBK"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); PrintWriter out = response.getWriter(); BufferedWriter bw = new BufferedWriter(out);
接下来将数据集合遍历写入方法同上面给出的方法
// 写入文件头部。。。。。
之后就会将生成的csv文件下载到浏览器的默认路径了。
对于将java对象中要导出的属性值生成集合再导出,效率并不高,可以直接覆盖对象的toString方法来提高效率;
不过在这里就不做实现了。
好了,csv文件的生成和导出已经完成了,有问题的可以留言提问,谢谢。
相关文章推荐
- 解决java程序开发过程中由于生成的bin bin-test classes文件而使得svn提示有未提交的文件
- 学习安卓开发过程中遇到关于R.Java文件的问题
- java生成csv文件乱码的解决方法示例 java导出csv乱码
- java导出生成csv文件的方法
- mac环境下装Eclipse+ADT做安卓开发,遇到R.java文件不参自动生成问题
- java从数据库导出.csv文件及中文乱码问题
- silverlight开发:将datagrid中的数据导出为Excel和CSV文件
- java 导出成.csv文件的乱码问题
- java生成导出excle文件
- Java开发过程中遇到的一些小错误集锦-以后会不断地更新
- 简化 Ajax 和 Java 开发,第 1 部分: 用 JSP 标记文件动态生成 JavaScript 代码
- 哪些年遇到过的Andriod问题(9)R.java文件不能自动生成解决方法
- JNI 编写动态链接库 HelloNative 详细过程(也即用Java和C在Linux下动态生成并使用so文件过程)
- java转换CSV文件生成xml格式数据
- flash(as3.0)调用EXE文件,及java程序打JAR包和生成EXE过程
- java开发_eclipse导出为war文件,热部署到tomcat运行总结
- 在java开发过程中,添加表时,需要配置一下的目录和文件。
- 怎么根据linux c/c++ 开发的d-bus服务生成java 的调用接口文件
- java连接oracle数据库(利用MyEclipse开发工具反向生成 bean与配置文件)
- 数据库中导出CSV文件与EXCEL文件数据对比可能遇到的问题与解决方法