• 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     }

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

  • 相关阅读:
    STM32|4-20mA输出电路
    Delphi版IP地址与整型互转
    侧方位停车
    98年的‘风暴’,08年的‘危机’,18年的“钱荒‘’
    一些软件设计的原则
    oracle-数据库的各种-锁-详解
    演员李艾佳去世突发病征年仅36岁
    【人生】王石:没变强是因为你太舒服
    耐心看的人早晚会成人上人
    Linux之make的用法讲解
  • 原文地址:https://www.cnblogs.com/FlyHeLanMan/p/6269558.html
Copyright © 2020-2023  润新知