Ⅰ 使用OpenCSV在java中讀寫CSV
本系列文章最後一部分,專門探討在Java中使用OpenCSV進行CSV文件讀寫。OpenCSV憑借其簡潔易懂的特性,以及與Apache Commons CSV相媲美的性能和功能,成為CSV解析領域的有力選擇。
OpenCSV以Apache 2.0許可證發布,用戶可在下載後評估其源代碼、Java文檔和豐富的JUnit測試套件。該庫的便捷性在於其集成於MVNRepository,簡化了依賴關系管理。CSVReader的靈活性體現在一次讀取一個記錄、多個記錄列表或作為迭代器,適應不同讀取數據需求。
雖然OpenCSV在預定義格式上不如Apache Commons CSV豐富,但它依賴兩個解析器提供基礎功能,支持讀取、寫入和將Bean直接映射至CSV,甚至能利用標題行實現CSV到Java Map的高效轉換。
對於讀取CSV,OpenCSV通過CSVReader實現,與Apache Commons CSV的CSVParser相當,支持簡單與復雜解析策略。CSV文件遍歷時,每條記錄為一個字元串數組,包含多個單獨欄位。若CSV使用非逗號分隔符,可通過兩參數構造函數自定義分隔符。
映射CSV記錄至Java對象時,OpenCSV提供兩種方法:基於標題的註解@CSVBindByName或基於位置的註解@CSVBindByPosition。對於標題一致的文件,@CSVBindByName註解可自動處理解析數據映射和類型轉換,簡化流程。當標題與變數名不一致時,可使用註解指定映射標志,以適應特定數據集的結構。若文件無標題,@CSVBindByPosition註解則提供按列位置映射的解決方案。
寫入CSV時,OpenCSV提供更多選項,允許從字元串數組或對象列表生成CSV文件。從對象列表寫入前需初始化和聲明對象。使用字元串數組生成CSV文件時,可通過CSVWriter構造函數指定分隔符,或利用FileWriter或Writer生成文件。通過構造函數參數自定義文件格式、欄位和字元常量,實現數據輸出的靈活性。未明確指定的參數將使用默認值。
綜上所述,OpenCSV憑借其簡潔的設計、廣泛的適用場景和豐富的功能,成為處理CSV文件的理想選擇,無論是讀取還是寫入,都能提供高效、靈活的解決方案。
Ⅱ java解析csv用什麼jar包比較好
CSV其實就是COMMA SEPARATED VALUE的縮寫。
在開發中用Java操作csv文件有專門的的API叫javacsv.jar
Ⅲ java 讀取csv文件里指定行列的值,比如讀取第三行第二列的值。
java讀取csv文件,按照指定格式:
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
/**
* 讀取CSV文件
* 所謂"CSV",是Comma Separated Value(逗號分隔值)的英文縮寫,通常都是純文本文件。
* 可以看成資料庫程序與電子表格之間一種中間通信文件,資料庫可以導出。csv格式,excel也可以導入並打開。csv文件,例子如下
* sj_mino1001.jpg,715282,4FB55FE8,
* sj_mino1002.jpg,471289,93203C5C,
* sj_mino1003.jpg,451929,C4E80467,
*
*/
public class CSVDeal{
public static void main(String[] args) {
try {
String[] stringList;
String csvFilePath = "C:\\Users\\Administrator\\Desktop\\20140227135936.csv";
String sourceFileString= "C:\\Users\\Administrator\\Desktop\\test.csv";
CsvReader reader = new CsvReader(csvFilePath); //默認是逗號分隔符,UTF-8編碼
CsvWriter writer = new CsvWriter(sourceFileString);
/*
* readRecord()判斷是否還有記錄,getValues()讀取當前記錄,然後指針下移
*/
reader.readRecord();
writer.writeRecord(reader.getValues()); //讀取表頭
/*
* 逐行讀取,以免文件太大
* 處理表頭後面的數據,這里是在第12列數據統一加前綴"V"
*/
while(reader.readRecord()){
stringList = reader.getValues();
stringList[11] = 'V' + stringList[11];
writer.writeRecord(stringList);
}
reader.close();
writer.close();
}catch(Exception ex){
System.out.println(ex);
}
}
}