java导出生成csv文件的方法

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

txt中显示:

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

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

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

/**
   *
   *         导出生成csv格式的文件
   * @author     ccg
   * @param     titles csv格式头文
   * @param     propertys 需要导出的数据实体的属性,注意与title一一对应
   * @param     list 需要导出的对象集合
   * @return
   * @throws     IOException
   * Created     2017年1月5日 上午10:51:44
   * @throws     IllegalAccessException
   * @throws     IllegalArgumentException
   */
  public static <T> String exportCsv(String[] titles,String[] propertys,List<T> list) throws IOException, IllegalArgumentException, IllegalAccessException{
    File file = new File("d:\\test.csv");
    //构建输出流,同时指定编码
    OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(file), "gbk");

    //csv文件是逗号分隔,除第一个外,每次写入一个单元格数据后需要输入逗号
    for(String title : titles){
      ow.write(title);
      ow.write(",");
    }
    //写完文件头后换行
    ow.write("\r\n");
    //写内容
    for(Object obj : list){
      //利用反射获取所有字段
      Field[] fields = obj.getClass().getDeclaredFields();
      for(String property : propertys){
        for(Field field : fields){
          //设置字段可见性
          field.setAccessible(true);
          if(property.equals(field.getName())){
            ow.write(field.get(obj).toString());
            ow.write(",");
            continue;
          }
        }
      }
      //写完一行换行
      ow.write("\r\n");
    }
    ow.flush();
    ow.close();
    return "0";
  }

测试类如下:

public void test() throws IOException, IllegalArgumentException, IllegalAccessException{
    String[] titles = new String[]{"ID","姓名"};
    String[] propertys = new String[]{"id","name"};
    List<User> list = new ArrayList<User>();
    User user;
    user = new User();
    user.setId(1L);
    user.setName("张三");
    list.add(user);
    user = new User();
    user.setId(2L);
    user.setName("李四");
    list.add(user);
    CsvUtil.getInstance().exportCsv(titles,propertys, list);
  }

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

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

(0)

相关推荐

  • Java中使用opencsv读写csv文件示例

    OpenCSV是一个简单的用于解析CSV文件的java类库,它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符,最重要的是OpenCSV可以用于商业化(commercial-friendly).具体的使用方法: 读CSV文件 1.使用Iterator方式读 复制代码 代码如下: CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); String [] nextLine; while ((n

  • java生成csv文件乱码的解决方法示例 java导出csv乱码

    复制代码 代码如下: import java.io.File;import java.io.IOException;import java.util.List; import com.google.common.base.Charsets;import com.google.common.base.Joiner;import com.google.common.base.Preconditions;import com.google.common.collect.Lists;import com

  • Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputS

  • 应用Java泛型和反射导出CSV文件的方法

    本文实例讲述了应用Java泛型和反射导出CSV文件的方法.分享给大家供大家参考.具体如下: 项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. 复制代码 代码如下: public <T> void saveFile(List<T> list, String outFile) throws IOException {         if (list == null || list.isEmpty())

  • java读取csv文件和写csv示例分享

    复制代码 代码如下: import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.

  • 使用Javacsv.jar的jar包操作csv文件的方法

    CSV其实就是COMMA SEPARATED VALUE的缩写.csv文件是分隔文件,如果使用java的io流来写,比较麻烦,这里为大家提供一个javacsv的jar包,这个很方便操作csv文件. 下载地址:http://xiazai.jb51.net/201608/yuanma/javcsv(jb51.net).rar 那如何使用呢? 只要看看以下一个例子,您一下就明白了. import com.csvreader.CsvReader; import com.csvreader.CsvWrit

  • java导出csv方法实现讲解

    首先,通过ibatis中的sql语句查询出所要得到的记录,并将其存放在List中: 复制代码 代码如下: List<?> results = this.reportService.getArrayBeanReportDataSource(super.getQuery_sql_csv(), query_obj); 这样的情况下,因为我们是要写公共方法,所以使用?而没有使用一个确定的类型来标注. 所以才需要使用反射从List里取出的对象的属性值. 复制代码 代码如下: String[] Colum

  • java实现CSV 字段分割

    支持引号嵌套,逗号分割 private static String[] cvsField(String line){ List<String> fields = new LinkedList<>(); char[] alpah = line.toCharArray(); boolean isFieldStart = true; int pos = 0; int len = 0; boolean yinhao = false; for(char c : alpah){ if(isFi

  • java读取csv文件示例分享(java解析csv文件)

    复制代码 代码如下: import java.io.*;import java.util.*;public class HandleCsv {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(   new InputStreamReader(    new FileInputStream("test.csv")   )); String li

  • java读取csv文件内容示例代码

    复制代码 代码如下: package com.huateng.readcsv; import java.io.BufferedReader;import java.io.FileReader;import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class CsvUtil {        private String fileName = null;        private B

随机推荐