在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.util包Scanner类来读取 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的包装 .我们将使用CSVReader的readNext()方法逐行读取文件。它返回一个字符串数组,我们不需要担心拆分行。
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 Mybatis框架增删查改与核心配置详解流程与用法
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录2021-10-10
RestTemplate get请求携带headers自动拼接参数方式
这篇文章主要介绍了RestTemplate get请求携带headers自动拼接参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07
Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例
这篇文章主要介绍了Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例,本文直接给出代码实例和效果截图,需要的朋友可以参考下2014-10-10
form表单数据通过@RequestBody解析成java实体类的实现过程
解决@RequestBody请求无法接收前端数据问题:前端通过axios提交数据,后端使用fastJSON解析时出现NULL,通过在实体类上添加@JSONField注解指定属性对应关系,可以成功接收数据2025-12-12


最新评论