您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页java 动态导出csv文件 (csv的列标题根据传入参数的不同发生变化)

java 动态导出csv文件 (csv的列标题根据传入参数的不同发生变化)

来源:步遥情感网
/**
 * 该方法在需打印列表格式为List<Map<Object, Object>>时适用
 * author:ty
 * */
    public void exportSomeCsv(List<ProbeLogEntity> list, String csvName, List<SysFiledExportTaskDto> exportSignals) throws Exception {
        for (int i = 0; i < list.size(); i++) {
            ProbeLogEntity probeLogEntity = list.get(i);
            probeLogEntity.getVin();
        }
        List<Map<String, Object>> records = new ArrayList<>();
        Map<String, Object> maptest1 = new HashMap<>();
        Map<String, Object> maptest2 = new HashMap<>();
        Map<String, Object> maptest3 = new HashMap<>();
        maptest1.put("字段1", "你");
        maptest1.put("字段2", "好");
        maptest2.put("字段1", "你你");
        maptest2.put("字段2", "好好");
        maptest3.put("字段1", "你你你");
        maptest3.put("字段2", "好好好");
        records.add(maptest1);
        records.add(maptest2);
        records.add(maptest3);

        FileOutputStream fos = new FileOutputStream(csvName);
        OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
        byte[] uft8bom = {(byte) 0xef, (byte) 0xbb, (byte) 0xbf};
        fos.write(uft8bom);

        Map<String, String> fieldHeaderMap = new HashMap<>();
        String[] headerArr = new String[]{"这是啥", "字段1", "字段2"};
        fieldHeaderMap.keySet().toArray(headerArr);//字段名称
        //写入表头
        CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(headerArr);
        CSVPrinter csvPrinter = new CSVPrinter(osw, csvFormat);
        Map<String, Object> temp = new LinkedHashMap<>();

        for (Map<String, Object> record : records) {
            for (String s : headerArr) {
                temp.put(s, record.get(s));
            }
            csvPrinter.printRecord(temp.values());
            temp.clear();
        }
        csvPrinter.flush();
        csvPrinter.close();

    }



/**
 *  该方法在需打印列表格式为List<CLASS>时适用
 *  author:ty
 * */
    public static <T> void writeCSV(Collection<T> dataSet, String csvFilePath, String[] csvHeaders)  {
        try {
            //判断文件是否存在,存在则删除,然后创建新表格
            File tmp = new File(csvFilePath);
            if (tmp.exists()) {
                if (tmp.delete()) {
                }
            }

            FileOutputStream fos = new FileOutputStream(csvFilePath);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            byte[] uft8bom = {(byte) 0xef, (byte) 0xbb, (byte) 0xbf};
            fos.write(uft8bom);
            CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(csvHeaders);
            CSVPrinter csvPrinter = new CSVPrinter(osw, csvFormat);

            //遍历集合 写内容
            Iterator<T> it = dataSet.iterator();
            while (it.hasNext()) {
                T t = (T) it.next();
                //获取类属性
                Field[] fields = t.getClass().getDeclaredFields();
                String[] csvContent = new String[fields.length];
                for (short i = 0; i < fields.length; i++) {
                    Field field = fields[i];

                    String fieldName = field.getName();
                    String getMethodName = "get"
                            + fieldName.substring(0, 1).toUpperCase()
                            + fieldName.substring(1);
                    try {
                        Class tCls = t.getClass();
                        Method getMethod = tCls.getMethod(getMethodName, new Class[]{});
                        Object value = getMethod.invoke(t, new Object[]{});
                        if (value == null) {
                            continue;
                        }
                        //取值并赋给数组
                        String textValue = value.toString();
                        csvContent[i] = textValue;
                    } catch (Exception e) {
                        e.getStackTrace();
                    }
                }
                //迭代插入记录
                // csvWriter.writeRecord(csvContent);
                csvPrinter.printRecord(csvContent);
            }
            csvPrinter.close();
            System.out.println("<--------CSV文件写入成功-------->");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务