Java CSV 转 List

10 Sept 2024 | 4 分钟阅读

表格数据可以存储在一种称为逗号分隔值(CSV)的流行格式中。但有时,我们需要将此CSV数据转换为List形式。为了实现这一点,Java提供了各种方法将CSV数据转换为List形式。在本节中,我们将讨论如何将CSV数据转换为List形式

1. 使用BufferedReader和FileReader

读取CSV文件最简单的方法之一是结合使用BufferedReader和FileReader。该方法使用CSVReader类和OpenCSV库将Java中的CSV文件转换为列表。所需的导入,CSVReader、FileReader、ArrayList和List,使得集成关键功能更加容易。首先,必须实例化CSVReader。

CSVReader.java

输出

679096 2017-01-02 16:43:49.237940 treatment new_page 0 
691699 2017-01-09 23:42:35.963486 treatment new_page 0 
807595 2017-01-22 10:43:09.285426 treatment new_page 0 
924816 2017-01-20 10:59:03.481635 control old_page 0 
846225 2017-01-16 15:24:46.705903 treatment new_page 0 
740310 2017-01-10 17:22:19.762612 control old_page 0

ab_data.csv

679096,2017-01-02 16:43:49.237940,treatment,new_page,0
691699,2017-01-09 23:42:35.963486,treatment,new_page,0
807595,2017-01-22 10:43:09.285426,treatment,new_page,0
924816,2017-01-20 10:59:03.481635,control,old_page,0
846225,2017-01-16 15:24:46.705903,treatment,new_page,0
740310,2017-01-10 17:22:19.762612,control,old_page,0

解释

为了有效地读取文件内容,请使用BufferedReader。为了建立与CSV文件的连接,请使用FileReader。readCSV()方法将所有CSV行读取并使用逗号作为分隔符进行分割,然后将值存储在List<String[]>中。main()方法将引导您完成处理数据和使用readCSV()方法的过程。

2. 使用Scanner和LinkedList

在此方法中,我们通过使用LinkedList和Scanner类,有效地将Java中的CSV数据转换为列表。要处理文件输入并存储数据结构,请导入Scanner、File、FileNotFoundException、LinkedList和List。开始此过程需要将一个File实例(初始化为CSV文件的路径)传递给Scanner实例。然后,转换后的CSV数据将被动态地存储在名为csvData的LinkedList中。

CSVToListConverter.java

输出

679096	2017-01-02 16:43:49.237940	treatment	new_page	0	
691699	2017-01-09 23:42:35.963486	treatment	new_page	0	
807595	2017-01-22 10:43:09.285426	treatment	new_page	0	
924816	2017-01-20 10:59:03.481635	control	old_page	0	
846225	2017-01-16 15:24:46.705903	treatment	new_page	0	
740310	2017-01-10 17:22:19.762612	control	old_page	0

解释

convertUsingScanner()函数接受文件路径作为输入,使用Scanner读取CSV文件,并输出一个包含每行字符串数组的LinkedList。

main()方法将CSV文件路径发送到convertUsingScanner(),并打印结果列表。

3. 使用Stream API和Files

该方法使用Java 8中引入的Files类和Stream API来读取和解析CSV文件。convertUsingStreamAPI()方法接受文件路径和分隔符作为参数。它通过使用Files.lines()方法读取CSV文件的每一行来创建一个行的Stream。随后,通过映射过程,根据指定的分隔符将每一行分割成字符串数组。最后,通过collect过程将结果编译成字符串数组的List。

CSVToListConverter.java

输出

679096	2017-01-02 16:43:49.237940	treatment	new_page	0	
691699	2017-01-09 23:42:35.963486	treatment	new_page	0	
807595	2017-01-22 10:43:09.285426	treatment	new_page	0	
924816	2017-01-20 10:59:03.481635	control	old_page	0	
846225	2017-01-16 15:24:46.705903	treatment	new_page	0	
740310	2017-01-10 17:22:19.762612	control	old_page	0

解释

使用Files.lines()函数从给定的文件路径(Paths.get(filePath))打开一个行的Stream。map操作通过使用split(delimiter)方法将其拆分为字符串数组来转换每一行。之后,使用Collectors.toList()的collect函数,从生成的字符串数组Stream创建List。