在Java中读取CSV文件的方式

 更新时间:2023年06月07日 11:50:14   作者:allway2  
在项目开发中我们经常需要读取csv的内容的操作,读取的逻辑并不复杂,下面这篇文章主要给大家介绍了关于在Java中读取CSV文件的方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

CSV 代表逗号分隔值,是一种非常流行的文件类型。CSV文件用于存储由逗号分隔的信息。文件的每一行都用于表示一个数据记录。在本教程中,我们将学习如何读取 CSV 文件并将其内容复制到数组或列表中。在本教程中,我们将使用仅包含三条记录的简单 CSV 文件。该文件的内容如下所示。

Justin, 101, 9.1
Jessica, 102, 8.7
Clark, 103, 7.1

使用BufferedReader读取 CSV 文件

java.io包的BufferedReader类可用于读取基本 CSV 文件。我们将简单地使用readLine()方法读取文件的每一行。然后我们可以使用split()方法拆分行并将逗号作为分隔符传递。 

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

请注意,我们不能使用此方法读取更复杂的 CSV 文件或逗号本身为值的文件。例如,考虑一个 CSV 文件,其中第二列用于存储标点符号。

Full Stop,"."
Comma,","
Exclamation,"!"

如果我们尝试读取此文件,则以下数据存储在列表中。我们可以看到文件的第二行没有存储任何值(逗号已被省略)。我们也不需要引号。

输出

Full Stop "."
Comma " "
Exclamation "!"

使用扫描程序类读取 CSV 文件

我们还可以使用java.utilScanner类来读取 CSV 文件。此方法与BufferedReader非常相似。我们将简单地读取文件的每一行,然后使用逗号作为分隔符将其拆分。然后我们可以将单个记录存储在列表列表中。

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类方法不能用于复杂的 CSV 文件。

使用 OpenCSV 库读取 CSV 文件

OpenCSV是一个CSV文件解析库,可以使从CSV文件读取变得更加容易。CSVReader用作FileReader的包装 .我们将使用CSVReaderreadNext()方法逐行读取文件。它返回一个字符串数组,我们不需要担心拆分行。 

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文件,其中我们有一个值为逗号的单元格。如我们所见,逗号被CSVReader删除 .甚至报价也被删除,数据以更好的格式呈现。

Full Stop .
Comma ,
Exclamation !

总结

CSV 文件用于存储由逗号(或在某些情况下为分号)分隔的数据。CSV 文件的每一行代表一条记录。我们可以使用BufferedReader或Scanner轻松地从基本 CSV 文件中读取数据。但是在读取更复杂的 CSV 文件时,我们可能无法获得预期的结果。读取 CSV 文件的最简单方法是使用外部库,例如OpenCSV .

到此这篇关于在Java中读取CSV文件的文章就介绍到这了,更多相关Java读取CSV文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 堆排序原理及算法代码详解

    堆排序原理及算法代码详解

    这篇文章主要介绍了堆排序算法的讲解及Java版实现,堆排序基于堆这种数据结构,在本文中对堆的概念也有补充介绍,需要的朋友可以参考下
    2021-08-08
  • Idea安装bpmn插件actiBPM的详细过程(解决高版本无法安装actiBPM插件)

    Idea安装bpmn插件actiBPM的详细过程(解决高版本无法安装actiBPM插件)

    这篇文章主要介绍了Idea安装bpmn插件actiBPM的详细过程(解决高版本无法安装actiBPM插件)的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • maven的三种工程pom、jar、war的区别

    maven的三种工程pom、jar、war的区别

    这篇文章主要介绍了maven的三种工程pom、jar、war的区别,详细的介绍pom、jar、war和区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • SpringMVC中的HandlerMapping和HandlerAdapter详解

    SpringMVC中的HandlerMapping和HandlerAdapter详解

    这篇文章主要介绍了SpringMVC中的HandlerMapping和HandlerAdapter详解,在Spring MVC中,HandlerMapping(处理器映射器)用于确定请求处理器对象,请求处理器可以是任何对象,只要它们使用了@Controller注解或注解@RequestMapping,需要的朋友可以参考下
    2023-08-08
  • java实现会反弹的小球示例

    java实现会反弹的小球示例

    这篇文章主要介绍了java实现会反弹的小球示例,需要的朋友可以参考下
    2014-04-04
  • 优化SpringBoot程序启动速度的实现

    优化SpringBoot程序启动速度的实现

    本文主要介绍了优化SpringBoot程序启动速度的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Java 中的 clone( ) 和 new哪个效率更高

    Java 中的 clone( ) 和 new哪个效率更高

    很多朋友不太清楚clone()和new那个更快?针对这个问题我百度了好多资料,最终小编总结下关于Java 中的 clone( ) 和 new哪个效率更高的问题,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • 关于@RequestParam注解的使用(简单易懂)

    关于@RequestParam注解的使用(简单易懂)

    这篇文章主要介绍了关于@RequestParam注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解Java比较器

    详解Java比较器

    这篇文章主要介绍了Java比较器的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 零基础如何系统的学习Java

    零基础如何系统的学习Java

    这篇文章主要介绍了零基础如何系统的学习Java,很多朋友纠结这个问题,教材书不知道从何学起,今天小编给大家分享一篇教程帮助到家梳理这方面的知识
    2020-07-07

最新评论