java导出生成csv文件

首先我们需要对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         
19         //csv文件是逗号分隔,除第一个外,每次写入一个单元格数据后需要输入逗号
20         for(String title : titles){
21             ow.write(title);
22             ow.write(",");
23         }
24         //写完文件头后换行
25         ow.write("
");
26         //写内容
27         for(Object obj : list){
28             //利用反射获取所有字段
29             Field[] fields = obj.getClass().getDeclaredFields();
30             for(String property : propertys){
31                 for(Field field : fields){
32                     //设置字段可见性
33                     field.setAccessible(true); 
34                     if(property.equals(field.getName())){
35                         ow.write(field.get(obj).toString());
36                         ow.write(",");
37                         continue;
38                     }
39                 }
40             }
41             //写完一行换行
42             ow.write("
");
43         }
44         ow.flush();
45         ow.close();
46         return "0";
47     }

测试类如下:

 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     }

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

原文地址:https://www.cnblogs.com/FlyHeLanMan/p/6269558.html