在Java中讀取CSV文件的方式
CSV 代表逗號(hào)分隔值,是一種非常流行的文件類(lèi)型。CSV文件用于存儲(chǔ)由逗號(hào)分隔的信息。文件的每一行都用于表示一個(gè)數(shù)據(jù)記錄。在本教程中,我們將學(xué)習(xí)如何讀取 CSV 文件并將其內(nèi)容復(fù)制到數(shù)組或列表中。在本教程中,我們將使用僅包含三條記錄的簡(jiǎn)單 CSV 文件。該文件的內(nèi)容如下所示。
Justin, 101, 9.1
Jessica, 102, 8.7
Clark, 103, 7.1
使用BufferedReader讀取 CSV 文件
java.io
包的BufferedReader
類(lèi)可用于讀取基本 CSV 文件。我們將簡(jiǎn)單地使用readLine()
方法讀取文件的每一行。然后我們可以使用split()
方法拆分行并將逗號(hào)作為分隔符傳遞。
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import java.util.Arrays; public class ReadingCSV { public static void main(String[] args) { try { List< List<String> > data = new ArrayList<>();//list of lists to store data String file = "C:\\Users\\Lenovo\\Desktop\\demo.csv";//file path FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); //Reading until we run out of lines String line = br.readLine(); while(line != null) { List<String> lineData = Arrays.asList(line.split(","));//splitting lines data.add(lineData); line = br.readLine(); } //printing the fetched data for(List<String> list : data) { for(String str : list) System.out.print(str + " "); System.out.println(); } br.close(); } catch(Exception e) { System.out.print(e); } } }
輸出:
Justin 101 9.1
Jessica 102 8.7
Clark 103 7.1
請(qǐng)注意,我們不能使用此方法讀取更復(fù)雜的 CSV 文件或逗號(hào)本身為值的文件。例如,考慮一個(gè) CSV 文件,其中第二列用于存儲(chǔ)標(biāo)點(diǎn)符號(hào)。
Full Stop,"."
Comma,","
Exclamation,"!"
如果我們嘗試讀取此文件,則以下數(shù)據(jù)存儲(chǔ)在列表中。我們可以看到文件的第二行沒(méi)有存儲(chǔ)任何值(逗號(hào)已被省略)。我們也不需要引號(hào)。
輸出
Full Stop "."
Comma " "
Exclamation "!"
使用掃描程序類(lèi)讀取 CSV 文件
我們還可以使用java.util
包Scanner
類(lèi)來(lái)讀取 CSV 文件。此方法與BufferedReader
非常相似。我們將簡(jiǎn)單地讀取文件的每一行,然后使用逗號(hào)作為分隔符將其拆分。然后我們可以將單個(gè)記錄存儲(chǔ)在列表列表中。
import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Arrays; public class ReadingCSV { public static void main(String[] args) { try { List< List<String> > data = new ArrayList<>();//list of lists to store data String filePath = "C:\\Users\\Lenovo\\Desktop\\demo.csv";//file path File file = new File(filePath); Scanner s = new Scanner(file); //Reading until we run out of lines while(s.hasNextLine()) { List<String> lineData = Arrays.asList(s.nextLine().split(","));//splitting lines data.add(lineData); } //printing the fetched data for(List<String> list : data) { for(String str : list) System.out.print(str + " "); System.out.println(); } s.close(); } catch(Exception e) { System.out.print(e); } } }
輸出:
Justin 101 9.1
Jessica 102 8.7
Clark 103 7.1
就像BufferedReader
一樣,Scanner
類(lèi)方法不能用于復(fù)雜的 CSV 文件。
使用 OpenCSV 庫(kù)讀取 CSV 文件
OpenCSV
是一個(gè)CSV文件解析庫(kù),可以使從CSV文件讀取變得更加容易。CSVReader
用作FileReader的包裝
.我們將使用CSVReader
的readNext()
方法逐行讀取文件。它返回一個(gè)字符串?dāng)?shù)組,我們不需要擔(dān)心拆分行。
import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import com.opencsv.CSVReader; import java.util.Arrays; public class ReadingCSV { public static void main(String[] args) { try { List< List<String> > data = new ArrayList<>();//list of lists to store data String filePath = "C:\\Users\\Lenovo\\Desktop\\demo.csv";//file path FileReader fr = new FileReader(filePath); CSVReader reader = new CSVReader(fr); String[] lineData = reader.readNext(); //Reading until we run out of lines while(lineData != null) { data.add(Arrays.asList(lineData)); lineData = reader.readNext(); } //printing the fetched data for(List<String> list : data) { for(String str : list) System.out.print(str + " "); System.out.println(); } reader.close(); } catch(Exception e) { System.out.print(e); } } }
輸出:
Justin 101 9.1
Jessica 102 8.7
Clark 103 7.1
讓我們將上面的代碼用于CSV文件,其中我們有一個(gè)值為逗號(hào)的單元格。如我們所見(jiàn),逗號(hào)被CSVReader
刪除 .甚至報(bào)價(jià)也被刪除,數(shù)據(jù)以更好的格式呈現(xiàn)。
Full Stop .
Comma ,
Exclamation !
總結(jié)
CSV 文件用于存儲(chǔ)由逗號(hào)(或在某些情況下為分號(hào))分隔的數(shù)據(jù)。CSV 文件的每一行代表一條記錄。我們可以使用BufferedReader或
Scanner
輕松地從基本 CSV 文件中讀取數(shù)據(jù)。但是在讀取更復(fù)雜的 CSV 文件時(shí),我們可能無(wú)法獲得預(yù)期的結(jié)果。讀取 CSV 文件的最簡(jiǎn)單方法是使用外部庫(kù),例如OpenCSV
.
到此這篇關(guān)于在Java中讀取CSV文件的文章就介紹到這了,更多相關(guān)Java讀取CSV文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot @Configuration和@Componment的區(qū)別及說(shuō)明
這篇文章主要介紹了springboot @Configuration和@Componment的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類(lèi)
這篇文章主要介紹了Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類(lèi)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot項(xiàng)目中JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理的使用詳解
JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理都是SpringBoot中實(shí)現(xiàn)AOP的重要技術(shù),JDK動(dòng)態(tài)代理通過(guò)反射生成代理類(lèi),適用于目標(biāo)類(lèi)實(shí)現(xiàn)了接口的場(chǎng)景,性能較好,易用性高,但必須實(shí)現(xiàn)接口且不能代理final方法,CGLIB動(dòng)態(tài)代理通過(guò)生成子類(lèi)實(shí)現(xiàn)代理2025-03-03