0


在 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 文件

我们还可以使用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

.

标签: java 前端 html

本文转载自: https://blog.csdn.net/allway2/article/details/129615547
版权归原作者 allway2 所有, 如有侵权,请联系我们删除。

“在 Java 中读取 CSV 文件”的评论:

还没有评论