欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Java中讀取CSV文件的方式

 更新時(shí)間:2023年06月07日 11:50:14   作者:allway2  
在項(xiàng)目開(kāi)發(fā)中我們經(jīng)常需要讀取csv的內(nèi)容的操作,讀取的邏輯并不復(fù)雜,下面這篇文章主要給大家介紹了關(guān)于在Java中讀取CSV文件的方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

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.utilScanner類(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的包裝 .我們將使用CSVReaderreadNext()方法逐行讀取文件。它返回一個(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)文章

  • Java下載項(xiàng)目中靜態(tài)文件方式

    Java下載項(xiàng)目中靜態(tài)文件方式

    這篇文章主要介紹了Java下載項(xiàng)目中靜態(tài)文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java interceptor攔截器的方法

    Java interceptor攔截器的方法

    java里的攔截器是動(dòng)態(tài)攔截Action調(diào)用的對(duì)象,它提供了一種機(jī)制可使開(kāi)發(fā)者在一個(gè)Action執(zhí)行的先后執(zhí)行一段代碼,也能夠在一個(gè)Action,接下來(lái)通過(guò)本文給大家介紹Java interceptor攔截器的方法,感興趣的朋友一起看看吧
    2022-01-01
  • 如何將jdk10降版本到j(luò)dk1.8

    如何將jdk10降版本到j(luò)dk1.8

    這篇文章主要介紹了如何將jdk10降版本到j(luò)dk1.8問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • SpringBoot中使用 RabbitMQ的教程詳解

    SpringBoot中使用 RabbitMQ的教程詳解

    這篇文章主要介紹了SpringBoot中使用 RabbitMQ的教程詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • springboot @Configuration和@Componment的區(qū)別及說(shuō)明

    springboot @Configuration和@Componment的區(qū)別及說(shuō)明

    這篇文章主要介紹了springboot @Configuration和@Componment的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 淺談MyBatis-plus入門(mén)使用

    淺談MyBatis-plus入門(mén)使用

    這幾天本人了解到了MyBatis-plus,一個(gè) Mybatis 增強(qiáng)工具包.經(jīng)過(guò)一番研究,發(fā)現(xiàn)這玩意真的好用,不用寫(xiě)任何 xml ,內(nèi)置通用的 Mapper,而且完全是面向?qū)ο缶幊?文檔給的示例代碼,跟之前用過(guò)的 sequelize (Node.js 的 ORM)非常像,因此本人也嘗試了一把, 需要的朋友可以參考下
    2021-05-05
  • SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn)

    SpringCloud 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-03
  • Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類(lèi)

    Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類(lèi)

    這篇文章主要介紹了Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類(lèi)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot項(xiàng)目中JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理的使用詳解

    SpringBoot項(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
  • Java Volatile關(guān)鍵字你真的了解嗎

    Java Volatile關(guān)鍵字你真的了解嗎

    這篇文章主要為大家介紹了Java Volatile關(guān)鍵字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12

最新評(píng)論