CSV读写工具方法

CSV读写工具方法

自定义读取csv文件

@param String file:文件地址

public static ArrayList<List<String>> readCSVList(String file){
        ArrayList<List<String>> list = new ArrayList();
        CsvReader reader = null;
        try{
            // 初始化CsvReader并指定列分隔符和字符编码
            reader = new CsvReader(file, ',', Charset.forName("UTF-8"));
            while (reader.readRecord()){
                // 获取内容的两种方式
                String[] str = reader.getValues();
                System.out.println(str[0]);
                List<String> strList = Arrays.asList(str);
                System.out.println(strList.toString());
                list.add(strList);
            }
        } catch (FileNotFoundException e){
            logger.error("CSV文件未找到");
        } catch (IOException e){
            logger.error("写入CSV文件数据异常");
        }
        finally{
            if (reader != null){
                reader.close();
            }
        }
        return list;
    }

自定义写入csv文件

@param List<String[]> content:数据list
@param String path:文件地址

public static void writeCsv(List<String[]> content, String path) {
        CsvWriter writer = null;
        try {
            writer = new CsvWriter(path, ',', Charset.forName("GBK"));
            if(content != null && content.size() != 0) {
                for(String[] strArray : content) {
                   writer.writeRecord(strArray);
                }
            }else{
                logger.error("写入csv的文件为空。写入失败!");
            }
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        } finally {
            if(writer != null) {
                writer.close();
            }
        }
    }

将list对象转换为list数组,数组第一行为标题

因为写入csv文件的api为array,故将平常获取的对象转成array。获取的数据,用作写入CSV工具类参数。
@param String path:文件地址

public List<String[]> object2arr(List<T> list){
        List<String[]> resultList = new ArrayList<>();
        if(list==null||list.size()==0){
            return null;
        }
        try {
            T t = list.get(0);
            Field[] fields = t.getClass().getDeclaredFields();
            //去除默认数据中第一行为属性问题
//            String[] headerArr = new String[fields.length];
//            for(int i=0;i<fields.length;i++){
//                String fieldName = fields[i].getName();
//                headerArr[i] = fieldName;
//            }
//            resultList.add(headerArr);
            for (int i = 0; i < list.size(); i++) {
                String[] bodyArr = new String[fields.length];
                T eachT = list.get(i);
                Class<? extends Object> tClass = t.getClass();
                for (int j = 0; j < fields.length; j++) {
                    String fieldName = fields[j].getName();
                    String getMethodName = "get"
                            + fieldName.substring(0, 1).toUpperCase()
                            + fieldName.substring(1);
                    Method method = tClass.getMethod(getMethodName,new Class[] {});
                    Object value = method.invoke(eachT, new Object[]{});
                    String textValue = null;
                    if (value instanceof Date) {
                        Date date1 = (Date) value;
                        SimpleDateFormat sdff = new SimpleDateFormat("yyyy-MM-dd");
                        textValue = sdff.format(date1);
                    } else if (value == null) {
                        textValue = "";
                    } else {
                        textValue = value.toString();
                    }
                    bodyArr[j] = textValue;
                }
                resultList.add(bodyArr);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return resultList;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值