在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

java导出生成csv文件的方法

2017-3-7 12:51| 发布者: zhangjf| 查看: 1400| 评论: 0

摘要: 首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我们一般使用poi操作excel,导入, ...

首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图:

txt中显示:

修改文件后缀为csv后显示如下:

在java中我们一般使用poi操作excel,导入,导出都可以,但是poi很消耗内存,尤其在导出时,这个时候我们其实可以选择导出生成csv文件,因为其跟文本差不多,所以效率很高。

简单写了一个实现类,代码如下:

  1. /**
  2. *
  3. * 导出生成csv格式的文件
  4. * @author ccg
  5. * @param titles csv格式头文
  6. * @param propertys 需要导出的数据实体的属性,注意与title一一对应
  7. * @param list 需要导出的对象集合
  8. * @return
  9. * @throws IOException
  10. * Created 2017年1月5日 上午10:51:44
  11. * @throws IllegalAccessException
  12. * @throws IllegalArgumentException
  13. */
  14. public static <T> String exportCsv(String[] titles,String[] propertys,List<T> list) throws IOException, IllegalArgumentException, IllegalAccessException{
  15. File file = new File("d:\test.csv");
  16. //构建输出流,同时指定编码
  17. OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(file), "gbk");
  18. //csv文件是逗号分隔,除第一个外,每次写入一个单元格数据后需要输入逗号
  19. for(String title : titles){
  20. ow.write(title);
  21. ow.write(",");
  22. }
  23. //写完文件头后换行
  24. ow.write("rn");
  25. //写内容
  26. for(Object obj : list){
  27. //利用反射获取所有字段
  28. Field[] fields = obj.getClass().getDeclaredFields();
  29. for(String property : propertys){
  30. for(Field field : fields){
  31. //设置字段可见性
  32. field.setAccessible(true);
  33. if(property.equals(field.getName())){
  34. ow.write(field.get(obj).toString());
  35. ow.write(",");
  36. continue;
  37. }
  38. }
  39. }
  40. //写完一行换行
  41. ow.write("rn");
  42. }
  43. ow.flush();
  44. ow.close();
  45. return "0";
  46. }
复制代码

测试类如下:

  1. public void test() throws IOException, IllegalArgumentException, IllegalAccessException{
  2. String[] titles = new String[]{"ID","姓名"};
  3. String[] propertys = new String[]{"id","name"};
  4. List<User> list = new ArrayList<User>();
  5. User user;
  6. user = new User();
  7. user.setId(1L);
  8. user.setName("张三");
  9. list.add(user);
  10. user = new User();
  11. user.setId(2L);
  12. user.setName("李四");
  13. list.add(user);
  14. CsvUtil.getInstance().exportCsv(titles,propertys, list);
  15. }
复制代码

导出后生成的文件跟上图一样,算是一个封装吧,传入表头,以及表头对应实体的属性即可,注意要一一对应。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-4 02:38

Copyright 2015-2025 djqfx

返回顶部