java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要为大家详细介绍了 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);
- }
导出后生成的文件跟上图一样,算是一个封装吧,传入表头,以及表头对应实体的属性即可,注意要一一对应。
来源: http://www.phperz.com/article/17/1215/358884.html