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 文件
我们还可以使用j
ava.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
.
版权归原作者 allway2 所有, 如有侵权,请联系我们删除。