一、CSVReader簡介
CSV(Comma-Separated Values,逗號分隔值)是一種常用於數據交換的文件格式,其每行表示為一行數據記錄,每列由逗號或其他分隔符隔開,可以使用Excel等表格軟件進行簡單的編輯和處理。CSVReader是一種Java庫,用於以各種方式讀取CSV文件中的數據,包括可以輸入字符、字節數組、文件和URL等方式。
//CSVReader的基本使用方法 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReader(reader); String[] nextLine; while ((nextLine = csvReader.readNext()) != null) { //處理讀取的數據 } csvReader.close();
二、CSVReader讀取CSV文件的參數
CSVReader可以通過不同的參數來控制讀取CSV文件中的數據:
1. 分隔符:CSV文件中用於分隔不同數據項的字符,默認是逗號(,),可以使用setSeparator方法設置為其他字符,例如分號或製表符。
//設置分隔符為製表符 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReaderBuilder(reader) .withSeparator('\t') .build();
2. 引號:有些CSV文件中的數據項可能包含分隔符,這時可以使用雙引號或單引號將它們括起來,這些引號會在數據讀取過程中被忽略。如果使用的CSV文件沒有使用引號,可以用withQuoteChar方法設置引號為’\0’。
//設置引號為單引號 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReaderBuilder(reader) .withQuoteChar('\'') .build();
3. 換行符:CSV文件中不同行的數據項需要使用換行符進行分隔,默認是’\n’,可以使用withLineEnd方法設置為其他字符。
//設置換行符為'\r' Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReaderBuilder(reader) .withLineEnd('\r') .build();
三、CSVReader讀取CSV文件的方法
1. readAll方法:讀取整個CSV文件並返回一個二維String數組,其中每行數據為一個String數組,每個String數組的每個元素代表CSV文件中的一個數據項。
//讀取整個CSV文件到String數組中 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReader(reader); List lines = csvReader.readAll();
2. readNext方法:逐行讀取CSV文件中的數據,返回一個String數組,其中每個元素代表一行CSV文件中的一個數據項。當讀取到文件末尾時返回null。
//逐行讀取CSV文件 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReader(reader); String[] nextLine; while ((nextLine = csvReader.readNext()) != null) { //處理讀取的數據 }
3. Iterator方法:使用iterator方法可以迭代讀取CSV文件中的數據,返回一個Iterator接口。
//使用Iterator讀取CSV文件中的數據 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReader(reader); Iterator iterator = csvReader.iterator(); while (iterator.hasNext()) { String[] nextLine = iterator.next(); //處理讀取的數據 }
四、CSVReader讀取CSV文件特殊情況的處理
CSVReader可以處理非常規的CSV文件數據,例如包含換行符或引號等特殊字符的數據。在此情況下,CSVReader需要使用特定的方法來處理這些數據項,避免讀取出錯。
1. 跨行換行符:當一個數據項跨越多行時,CSVReader會將其視作多個數據項。使用splitRecords方法可以將其合併為一個完整的數據項。
//處理跨行換行符 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReader(reader); List lines = csvReader.readAll(); List records = new ArrayList(); for (String[] line : lines) { records.addAll(Arrays.asList(csvReader.splitRecords(line[0]))); }
2. 引號包含的分隔符:當CSV文件中的數據項包含分隔符時,需要使用讀取引號包含的數據項的方法,例如readNext方法的withQuoteChar參數。
//讀取包含分隔符的數據項 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReaderBuilder(reader) .withQuoteChar('\"') .build(); String[] nextLine; while ((nextLine = csvReader.readNext()) != null) { //處理讀取的數據 }
3. 引號包含的引號:當CSV文件中的數據項包含引號時,需要使用讀取引號包含的數據項的方法,例如readNext方法的withQuoteChar參數。
//處理引號包含的引號 Reader reader = new FileReader("test.csv"); CSVReader csvReader = new CSVReaderBuilder(reader) .withQuoteChar('\"') .build(); String[] nextLine; while ((nextLine = csvReader.readNext()) != null) { for (int i = 0; i < nextLine.length; i++) { nextLine[i] = nextLine[i].replaceAll("\"\"", "\""); } //處理讀取的數據 }
五、小結
使用CSVReader可以非常簡便地處理CSV文件中的數據。無論是簡單的CSV文件,還是包含各種特殊字符的CSV文件,CSVReader都可以通過不同的參數和方法進行靈活配置。CSVReader是一個Java庫,可以方便地和其他Java程序集成,為程序員帶來更多便利。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/154443.html