zoukankan      html  css  js  c++  java
  • 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     }

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

  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/FlyHeLanMan/p/6269558.html
Copyright © 2011-2022 走看看