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

阿里 阅读:185 2021-07-15 18:32:10 评论:0

项目中有需求要把数据导出为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; 
            } 
        } 
    }

标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号