- 在pom.xml中添加opencsv的maven依賴,我用的是4.4版本
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.4</version>
</dependency>
- 根據csv文件中要讀取哪幾列的值創建映射列名和data的類,需要讀哪些列就寫哪些列,我是根據列名寫的,也可以根據位置索引寫,不過我沒試。
import com.opencsv.bean.CsvBindByName;
public class Bill {
@CsvBindByName(column = "訂單號")
private String orderid;
@CsvBindByName(column = "完成時間")
private String time;
@CsvBindByName(column = "金額")
private Double amount;
}
- 創建過濾器,可以過濾掉不想要的行,這個不是必須的,看你是不是需要吧。我這個過濾器的意思就是把第一列是
#
的行都過濾掉不處理。
import com.opencsv.bean.CsvToBeanFilter;
public class MyCsvFilter implements CsvToBeanFilter {
@Override
public boolean allowLine(String[] line) {
if (line[0].startsWith("#")) {
return false;
}
return true;
}
}
- 創建好上面兩個類之後,就可以開始讀取了
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
public class MyCsvKit {
public static List<Bill> ReadCsv(String fileName) throws IOException {
InputStreamReader is = new InputStreamReader(new FileInputStream(fileName), "GBK");//注意此處的編碼格式,我之前遇到了用utf-8讀取出來全是null的問題
HeaderColumnNameMappingStrategy<Bill> mappingStrategy = new HeaderColumnNameMappingStrategy<>();
mappingStrategy.setType(Bill.class);
CsvToBean<Bill> build = new CsvToBeanBuilder<Bill>(is)
.withMappingStrategy(mappingStrategy)
.withFilter(new MyCsvFilter()) //上面建好的過濾器
.withSeparator(',') //逗號分隔符文件當然使用,分隔,當然也有例外
.withSkipLines(4) //意思是跳過前面幾行後再讀取
.withIgnoreQuotations(true)
.build();
List<Bill> billList = build.parse();
return billList;
}
}
完!