java环境下读取CSV文件

这篇具有很好参考价值的文章主要介绍了java环境下读取CSV文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、CSV文件简介

1.1.CSV文件介绍

1.2.CSV文件特点 

1.3. CSV文件规则

1.4.编者记录 

二、CSVParser文件读取 

 2.1.POM文件----commons-csv作为三方类库

 2.2.测试代码

 2.3.优缺点

三、将CSV文件转化为Excel的xlsx文件

3.1.POM文件 

 3.2.测试代码

 3.3.运行结果

 3.4.优缺点

四、CsvReader文件读取 

 4.1.POM文件

4.2.测试代码一

4.2.1.测试代码

4.2.2.运行截图

4.3.测试代码二

4.3.1.测试代码 

4.3.2.运行截图

 4.4.优缺点

五、CsvReader文件读取 

 5.1.POM文件

5.2.测试代码

 5.3.运行截图


一、CSV文件简介

1.1.CSV文件介绍

         逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
        CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是bitASCII是最基本的通用编码。

1.2.CSV文件特点 

        “CSV”并不是一种单一的、定义明确的格式(尽管RFC 4180有一个被通常使用的定义)。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:
        1、纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
        2、由记录组成(典型的是每行一条记录);
        3、每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
        4、每条记录都有同样的字段序列。 

1.3. CSV文件规则

        1、开头是不留空,以行为单位。
        2、可含或不含列名,含列名则居文件第一行。
        3、一行数据不跨行,无空行。
        4、以半角逗号(即,)作分隔符,列为空也要表达其存在。
        5、列内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来。
        6、文件读写时引号,逗号操作规则互逆。
        7、内码格式不限,可为 ASCII、Unicode 或者其他。
        8、不支持数字
        9、不支持特殊字符

1.4.编者记录 

 以上信息来自百度百科。由上述信息可知,CSV文件是以表格形式存在的文本文件,不能用读取表格的方法读取CSV文件。同时文件整体框架确定,但具体形式不固定,所以本文仅记录CSV文件的读取,不做详细数据处理。

二、CSVParser文件读取 

 2.1.POM文件----commons-csv作为三方类库

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-csv</artifactId>
	<version>1.9.0</version>
</dependency>

 2.2.测试代码

package com.task.test;


import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: Test5
 * @Author: BlueBlue
 * @Description:
 * @Date: 2023/3/8 0008 11:17
 */
public class Test5 {

    public static void main(String[] args) throws IOException {

        // 方法一读取CSV文件,该方法中FileReader 类是用于读取字符文件的,但它默认使用平台默认的字符编码
        FileReader reader= new FileReader("C:\\Users\\abc\\Desktop\\Jfile\\20230731-3.csv");
        CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT);
        //定义List用于接收文件数据
        List<String> list = new ArrayList<>();

        // 遍历CSV文件的每一行并获取单元格数据
        for (CSVRecord record : parser) {
            String str = "";
            for (int i = 0; i < record.size(); i++) {
                //可在此添加其他判断逻辑,对不需要的字段进行过滤
                if (i < record.size()-1) {
                    if (null != record.get(i)) {
                        str = str + record.get(i) + "|";
                    }else {
                        str = str + "|";
                    }
                }else {
                    if (null != record.get(i)) {
                        str = str + record.get(i);
                    }
                }

            }
            str += "\r\n";
            list.add(str);
            System.out.print("str输出验证 = " + str);
        }
        // 关闭流
        parser.close();
        reader.close();
    }
}
package com.task.test;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/**
 * @ClassName: Test5
 * @Author: BlueBlue
 * @Description:
 * @Date: 2023/3/8 0008 11:17
 */
public class Test5 {

    public static void main(String[] args) throws IOException {

        // 方法二读取CSV文件(方法一的优化)
        FileInputStream fis = new FileInputStream("C:\\Users\\abc\\Desktop\\Jfile\\20230731-3.csv");
        InputStreamReader isr = new InputStreamReader(fis, "GBK");
        BufferedReader reader = new BufferedReader(isr);
        // FileReader 类是用于读取字符文件的,但它默认使用平台默认的字符编码,限制较大
        // 使用BufferedReader包装FileReader以便按行读取文件内容
        CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT);
        //定义List用于接收文件数据
        List<String> list = new ArrayList<>();

        // 遍历CSV文件的每一行并获取单元格数据
        for (CSVRecord record : parser) {
            String str = "";
            for (int i = 0; i < record.size(); i++) {
                //可在此添加其他判断逻辑,对不需要的字段进行过滤
                if (i < record.size()-1) {
                    if (null != record.get(i)) {
                        str = str + record.get(i) + "|";
                    }else {
                        str = str + "|";
                    }
                }else {
                    if (null != record.get(i)) {
                        str = str + record.get(i);
                    }
                }

            }
            str += "\r\n";
            list.add(str);
            System.out.print("str输出验证 = " + str);
        }
        // 关闭流
        parser.close();
        reader.close();
        isr.close();
        fis.close();
    }
}

 2.3.优缺点

         优点:代码简单,不需要手动分割数据;

三、将CSV文件转化为Excel的xlsx文件

3.1.POM文件 

<!-- https://mvnrepository.com/artifact/e-iceblue/spire.xls.free -->
<dependency>
	<groupId>spire.xls.free</groupId>
	<artifactId>spire-xls-free</artifactId>
	<version>5.1.0</version>
</dependency>

 3.2.测试代码

package com.task.test;

import com.spire.xls.*;

import java.util.EnumSet;

/**
 * @ClassName: Test4
 * @Author: BlueBlue
 * @Description:
 * @Date: 2023/3/7 0007 17:31
 */
public class Test4 {

    public static void main(String[] args) {
        //思路:将原文件用表格打开,并保存为新表格

        System.out.println("文件转化开始!");
        //加载CSV文件
        Workbook workbook = new Workbook();

        //原截图存在中文乱码,现已优化
        //Excel版本与下文保持一致即可,具体版本看自己选择
        workbook.loadFromFile("C:\\Users\\cuipa\\Desktop\\Jfile\\20230731-3.csv", ",", 1, 1,ExcelVersion.Version2013, Charset.forName("GBK"));

        //获取第一个工作表
        Worksheet sheet = workbook.getWorksheets().get(0);

        //访问工作表中使用的范围
        CellRange usedRange = sheet.getAllocatedRange();
        //当将范围内的数字保存为文本时,忽略错误
        usedRange.setIgnoreErrorOptions(EnumSet.of(IgnoreErrorType.NumberAsText));

        //自适应行高、列宽
        usedRange.autoFitColumns();
        usedRange.autoFitRows();

        //保存文档
        workbook.saveToFile("C:\\Users\\cuipa\\Desktop\\Jfile\\CSVtoExcel.xlsx", ExcelVersion.Version2013);
        System.out.println("文件转换结束!");
    }

}

 3.3.运行结果

java环境下读取CSV文件

test4优化后截图

java环境下读取CSV文件

 3.4.优缺点

         优点:代码简单,可自定义数据分隔符

         缺点:只能转化为xlsx文件,且转化后还需要代码读取xlsx文件

四、CsvReader文件读取 

 4.1.POM文件

<!--csv文件操作-->
<dependency>
	<groupId>net.sourceforge.javacsv</groupId>
	<artifactId>javacsv</artifactId>
	<version>2.0</version>
</dependency>

4.2.测试代码一

4.2.1.测试代码

package com.task.test;

import com.csvreader.CsvReader;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: Test2
 * @Author: BlueBlue
 * @Description:
 * @Date: 2023/3/7 0007 15:50
 */
public class Test2 {
    public static void main(String[] args) {
        String fileName = "C:\\Users\\Administrator\\Desktop\\Jfile\\CSV\\20230327.csv";
        List<String[]> list = Test2.readCsvByCsvReader(fileName);
        for (String[] str :list) {
            for (String num : str) {
                System.out.print(num + "|");
            }
        }

        //打印二
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).length; j++) {
                System.out.println(list.get(i)[j]);
            }
        }

    }

    public static List<String[]> readCsvByCsvReader(String filePath) {
        List<String[]> arrList = new ArrayList<String[]>();
        try {
            CsvReader reader = new CsvReader(filePath, ',', Charset.forName("GBK"));
            while (reader.readRecord()) {
                arrList.add(reader.getValues()); // 按行读取,并把每一行的数据添加到list集合
            }
            reader.close();
            System.out.println("读取的行数:" + arrList.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return arrList;
    }

}

4.2.2.运行截图

java环境下读取CSV文件  

4.3.测试代码二

4.3.1.测试代码 

package com.task.test;

import com.csvreader.CsvReader;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @ClassName: Test2
 * @Author: BlueBlue
 * @Description:
 * @Date: 2023/3/7 0007 15:50
 */
public class Test2 {
        String fileName = "C:\\Users\\Administrator\\Desktop\\Jfile\\CSV\\20230327.csv";
        List<List<String>> list2 = Test2.readCsvByCsvReader2(fileName);
        for (int i = 0; i < list2.size(); i++) {
            for (int j = 0; j < list2.get(i).size(); j++) {
                if (list2.get(i).get(j) != null) {
                    System.out.println(list2.get(i).get(j));
                }
            }
        }

    }


    public static List<List<String>> readCsvByCsvReader2(String filePath) {
        List<List<String>> arrList = new ArrayList<List<String>>();
        try {
            CsvReader reader = new CsvReader(filePath, ',', Charset.forName("GBK"));
            while (reader.readRecord()) {
                arrList.add(Arrays.asList(reader.getValues())); // 按行读取,并把每一行的数据添加到list集合
            }
            reader.close();
            System.out.println("读取的行数:" + arrList.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return arrList;
    }


}

4.3.2.运行截图

java环境下读取CSV文件

 4.4.优缺点

        优点:代码简单,可自行调节文本分隔符和读取文件的编码

        缺点:不知道,以后再说

        注:两个测试类没区别,就是返回值的数据类型不一样

五、CsvReader文件读取 

 5.1.POM文件

<!--csv文件操作-->
<dependency>
	<groupId>net.sourceforge.javacsv</groupId>
	<artifactId>javacsv</artifactId>
	<version>2.0</version>
</dependency>

5.2.测试代码

package com.task.test;

import com.csvreader.CsvReader;

import java.io.*;
import java.text.ParseException;

/**
 * @ClassName: Test1
 * @Author: BlueBlue
 * @Description:
 * @Date: 2023/3/7 0007 11:34
 */
public class Test1 {

    //该方法可以看做上述2.1的优化
    public static void main(String[] args) throws IOException, ParseException {
        String fileName = "C:\\Users\\Administrator\\Desktop\\Jfile\\CSV\\20230327.csv";
        DataInputStream inFile = new DataInputStream(new FileInputStream(fileName));
        BufferedReader reader = new BufferedReader(new InputStreamReader(inFile, "GBK"));//这里如果csv文件编码格式是GBK,改成GBK即可
        CsvReader creader = new CsvReader(reader, ',');
        String[] TxtInfo = null;
        for (int j = 0; creader.readRecord(); j++) {
            TxtInfo = creader.getRawRecord().split(",");
            System.out.println(creader.getRawRecord());
//          System.out.println("TxtInfo[1]:"+TxtInfo[1]);
        }
        creader.close();
        reader.close();
        inFile.close();
    }
}

 5.3.运行截图

java环境下读取CSV文件文章来源地址https://www.toymoban.com/news/detail-480434.html

到了这里,关于java环境下读取CSV文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx简介与安装配置,目录结构和配置文件介绍,配置nginx的service管理

    目录 一.nginx简介 1.简介 2.特性 二.nginx安装 1.rpm包方式 (1)下载扩展源 (2)安装扩展rpm包,nginx -V查看配置参数,后面源码安装时要用到 (3)默认的配置文件位置和html存放位置 2.源码方式 (1)建议提前下好所需要的部分包 (2)下载tar.gz包 (3)建议将包解压到/usr/local

    2024年02月04日
    浏览(33)
  • 解决java普通项目读取不到resouces目录下资源文件的办法

    现象如下:  可以看到resources目录已经在idea中标记成了资源目录resources root,而且target/classes目录下也编译出了resources目录下的pci.properties文件,换句话说:java在编译时是读取到了resources下的文件的。 可是为什么new File以后做路径判断时为什么返回false,找不到文件呢? 这里

    2024年02月09日
    浏览(36)
  • java通过FTP跨服务器动态监听读取指定目录下文件数据

    1、文件数据在A服务器(windows)(不定期在指定目录下生成),项目应用部署在B服务器(Linux); 2、项目应用在B服务器,监听A服务器指定目录,有新生成文件,进行读取文件信息,持久化数据; 3、提供两块内容,第一安装windows FTP服务;第二项目源码,希望可以帮助到你

    2024年02月03日
    浏览(43)
  • 读取CSV文件数据

    1.1 CSV文件: 纯文本文件,存储空间占用小,其内容一般默认用逗号分隔,可用记事本和EXCEL打开、编辑。 读取CSV文件内容可用pandas模块中的read_csv()函数。 1.2 read_csv()函数的语法(选取部分主要参数): pandas.read_csv(filepath_or_buffer,sep,header,names,index_col,usecols,nrows,encodi

    2024年02月07日
    浏览(43)
  • 【Python】Python读取CSV文件

    CSV文件是一种常见的数据存储格式,很多人在日常工作中需要使用Python处理CSV文件。Python提供了多种方法来读取CSV文件,包括使用标准库、第三方库和内置函数。本文将介绍多种Python读取CSV文件的方法。 Python标准库中的csv模块提供了方便的读取和写入CSV文件的方法。下面是一

    2024年02月15日
    浏览(33)
  • JS读取本地CSV文件数据

    文件中的部分数据如图 需求是需要提取出文件的数据 使用到的模块是 Papa Parse yarn add papaparse papaparse 的基本使用可以参考官方demo 首先需要注意, papaparse 解析本地文件, 需要的文件格式是从 DOM 中获得的 File 对象, 不能直接使用 require() 导入文件 以下方法直接导入是不可行的

    2024年02月07日
    浏览(27)
  • Python操作写入/读取csv文件

    网络工程师Python数据存储(第1节,CSV文件) 网络自动化运维演进的一个方向大致过程:网络工程师从关注配置制作脚本,完成后上设备刷配置,慢慢地演化为网络工程师关注和确定设备配置的某些重要控制参数,而把制作脚本任务交给Jinja2等去渲染生成,把下发脚本工作交

    2024年02月03日
    浏览(42)
  • Python中使用csv读取csv文件中的指定列

    第一种方法,使用next()获取列名,然后使用index定位列名 另一种方法是使用csv.DictReader()函数,将csv文件的每一行读成字典,代码更为简洁。

    2024年02月04日
    浏览(49)
  • Jmeter读取CSV文件数据并使用

    1、准备CSV文件数据   2、在新建的线程组下添加:  CSV 数据文件设置   ,根据需要设置字段,其中 变量名称 根据CSV中字段列来填写 3、设置好CSV数据文件设置后,可以在取样器中使用,根据设置的变量名称来取值 4、通过 察看结果树,可以查看取值是否正确   5、若CSV文件

    2024年02月16日
    浏览(28)
  • Python——csv文件的写入与读取

    CSV文件是一种常见的数据格式,它以逗号分隔不同的字段,每行表示一个数据记录。在Python中,我们可以使用csv模块来读取和写入CSV文件。 在Python中,我们可以使用csv模块的writer对象来写入CSV文件。下面是一个例子: 在上面的例子中,我们首先创建了要写入的数据,它是一

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包