java使用opencsv 4.0以上版本讀取csv文件的基本使用方法

  1. 在pom.xml中添加opencsv的maven依賴,我用的是4.4版本
<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>4.4</version>
</dependency>
  1. 根據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;
}
  1. 創建過濾器,可以過濾掉不想要的行,這個不是必須的,看你是不是需要吧。我這個過濾器的意思就是把第一列是 # 的行都過濾掉不處理。
import com.opencsv.bean.CsvToBeanFilter;

public class MyCsvFilter implements CsvToBeanFilter {
    @Override
    public boolean allowLine(String[] line) {
        if (line[0].startsWith("#")) {
            return false;
        }
        return true;
    }
}
  1. 創建好上面兩個類之後,就可以開始讀取了
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;
	}
}

完!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章