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     }

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

  • 相关阅读:
    To select the file to upload we can use the standard HTML input control of type
    Cascading Menu Script using Javascript Explained
    网站首页head区代码规范
    轻松掌握 Java 泛型
    JDK 5.0 中的泛型类型学习
    如何在firefox下获取下列框选中option的text
    是同步方法还是 synchronized 代码? 详解多线程同步规则
    javascript select option对象总结
    Select的动态取值(Text,value),添加,删除。兼容IE,FireFox
    javascript在ie和firefox下的一些差异
  • 原文地址:https://www.cnblogs.com/FlyHeLanMan/p/6269558.html
Copyright © 2011-2022 走看看