Skip to content
BigBaicai edited this page Nov 22, 2018 · 1 revision

读取CSV

FileInputStream inputStream = new FileInputStream("test.csv");
BeanReader reader = CSVReader.newBeanReader(inputStream, TestObj.class)
         .setHeaderMap(headrs -> headrs)
         .setCellProcessor(new CellProcessor[]{
                 new Optional(),
                 new Optional()
         }).setPrintInfo(true);
List<TestObj> result = reader.readCSV();

setHeaderMap() 接收一个joycai.utils.sheet.csv.ICSVHeaderMapper实例,该接口定义如下

public interface ICSVHeaderMapper {
    String[] mapHeader(String[] csvHeaders);
}

入参为csv的表头数组,返回值是要按照顺序对应的对象的字段名,举例来说,假设有一个对象为:

class User{
    String name;
    String age;
    String gender;
}

而要读取的csv表头为“年龄”,“姓名”,“性别”,那么在setHeaderMap()中应当如下:

.setHeaderMap(headrs->{
   //此时headers数组的内容为{“年龄”,“姓名”,“性别”}
   return new String[]{"age","name","gender"}
})

写入CSV

TestObj testObj = new TestObj();
testObj.setCol1("ttt");
testObj.setCol2("tvvt");
testObj.setF1(1f);
testObj.setF2(2f);
testObj.setI1(1);
testObj.setI2(2);
testObj.setDate(new Date());
testObj.setBl1(false);

FileOutputStream outputStream = new FileOutputStream(new File("output/out.csv"));
CSVWriter.newBeanWriter(new OutputStreamWriter(outputStream), TestObj.class)
        .addHeader(new String[]{"列1","列2"})
        .setCellProcessor(new CellProcessor[]{
                new Optional(),
                new Optional()
        })
        .writeFile(Lists.newArrayList(testObj),new String[]{"col1","col2"});

writeFile接收2个参数,参数1是数据对象列表,参数2则是一个String数组,内容是对象的字段名,数组顺序就是写入表格的列的顺序

Clone this wiki locally