应用Java泛型和反射导出CSV文件

项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能。

public <T> void saveFile(List<T> list, String outFile) throws IOException {
        if (list == null || list.isEmpty()) {
            return;
        }
        if (StringUtils.isEmpty(outFile)) {
            throw new IllegalArgumentException("outfile is null");
        }
        boolean isFirst = true;
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new FileWriter(outFile));
            for (T t : list) {
                StringBuilder sb1 = new StringBuilder();
                StringBuilder sb2 = new StringBuilder();
                Class clazz = (Class) t.getClass();
                Field[] fs = clazz.getDeclaredFields();
                for (int i = 0; i < fs.length; i++) {
                    Field f = fs[i];
                    f.setAccessible(true);
                    try {
                        if (isFirst) {
                            sb1.append(f.getName());
                            sb1.append(",");
                        }
                        Object val = f.get(t);
                        if (val == null) {
                            sb2.append("");
                        } else {
                            sb2.append(val.toString());
                        }
                        sb2.append(",");
                    } catch (IllegalArgumentException | IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
                if (isFirst) {
                    out.write(sb1.toString());
                    isFirst = false;
                    out.newLine();
                }
                out.write(sb2.toString());
                out.newLine();
            }
        } catch (IOException e1) {
            throw e1;
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (IOException e2) {
                throw e2;
            }
        }
    }
时间: 2024-10-14 16:52:30

应用Java泛型和反射导出CSV文件的相关文章

java utf8字符 导出csv 文件的乱码问题。

在输出的格式为UTF-8的格式,但是打开CSV文件一直为乱码,后来参考了这里的代码,搞定了乱码问题,原文请参考:http://hbase.iteye.com/blog/1172200 private static void writeBcp( ) throws IOException { //Create bcp file if not exist File bcpFile = new File("test.csv"); //bcpFile.delete(); byte[] bom =

Phoenix 导出csv文件

1. 是否存在高效的csv导出工具? phoenix提供了BulkLoad工具,使得用户可以将大数据量的csv格式数据高效地通过phoenix导入hbase,那么phoenix是否也存在高效导出csv数据的工具类呢? 这里可能有人会想是否能够按照导出常规hbase的方法来导出数据.比如自己写Java代码,或者用hbase原生支持的工具类,或者说采用pig提供的hbase工具类.是否能这么干取决于你phoenix建表时候字段的数据类型.如果字段采用的不是varchar.char等字符类型以及uns

thinkphp导出csv文件

导出csv文件可能就那几行代码,今天有个问题困扰我好久,就是导出之后出现一些html代码,这个不应该,view里面是空的,controller中最后也没有$this->display(),最后细心看到think_page_trace这样的字样,恍然大悟,是页面的跟踪日志,这个默认是会输出来的.最后在方法后面加了一个exit结束就好了,下面是代码: 1.IndexController.class.php <?php namespace Home\Controller; use Think\Con

项目--简单导出CSV文件

//导出 protected void BtnOutPut_Click(object sender, EventArgs e) { //角色 InitialRoles(); DataTable dt = DBClass.GetDataTable(string.Format(@"SELECT * FROM {0} Order By SN desc", View(Where))); StringWriter sw = new StringWriter(); //4S店不能看到总部价格等相关

mysqldump 导出CSV文件

mysqldump -h 127.0.0.1 -u root -p database table -t -T /home/mysql/ --fields-enclosed-by=\" --fields-terminated-by=, -w 增加条件判断语句 老外的一个处理mysql异常的错误,明天整理一下 http://icesquare.com/wordpress/mysql-starting-mysql-error-the-server-quit-without-updating-pid-f

php 导入/导出 csv 文件

php 导入/导出 csv 文件 1.简介 项目开发中,很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件,那么具体该如何实现呢?本文将使用原生PHP,实现了CSV格式数据的导入和导出功能.并解决相关乱码问题. 将xls转换成csv的文本格式,然后再用php分析这个文件,和PHP分析文本没有什么区别.优点:跨平台,效率比较高.可以读写.缺点:只能直接使用csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化.一个文件只有一个SHEET. 2.相关函数介绍 2.1

mysql SQLyog导入导出csv文件

1.选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作为 --> 选择cvs --> 选择下面的“更改” --> 字段 --> 变量长度 --> 字段被终止 -->输入逗号,(这是重点,否则导出的csv文件内容都在一列中,而不是分字段分列)下面两个选项框取消. 2.导出csv文件后,使用UE编辑器打开,另存为,选择编码为utf-8格式,保存. 3.打开csv文件,这样中文为正确的显示,如果不转码保存的话,为中文乱码. 4.选择数据

web前端导出csv文件

前言 导出文件,使用最多的方式还是服务器端来处理.比如jsp 中使用response 的方式. 但是,有时候可能就想使用web 前端是否也可以把页面上的内容导出来呢? 比如说,导出页面的一个表格. 这个需求肯定是有答案的,只是对于各浏览器处理会稍微不一样.(主要是IE 和其他浏览器的区别). 在IE中使用ActiveXObject 实现,在firefox 和Chrome 中使用  a 标签(或者js)就可以实现了. 这里主要讲一下其他浏览器中的实现. 使用 a 标签实现方式 直接上例子: [ht

导出csv文件数字会自动变科学计数法的解决方法

其实这个问题跟用什么语言导出csv文件没有关系.Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0.解决这个问题:只要把数字字段后面加上显示上看不见的字符即可,字符串前面或者结尾加上制表符"\t".php 程序可以这样判断,注意一定是"\t",不是'\t'.