Java读取csv文件里面的内容

目录

一,Java简介

二、CSV文件简介

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

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

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

三、CSVParser文件读取

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

 3.2.测试代码

 3.3.优缺点

四,第二个csv读取和输出

4.1csv 文件内容如下:

4.2打印的代码如下:

4.3输出的内容如下:


一,Java简介

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性。Java可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序和嵌入式系统应用程序等。Java的开发工具和框架也非常丰富,如Eclipse、IntelliJ IDEA、Spring等。Java的语法和结构类似于C++,但是Java具有更高的安全性和可移植性,因为Java程序在编译后会被转换成字节码,可以在任何支持Java虚拟机(JVM)的平台上运行。

二、CSV文件简介

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

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

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

三、CSVParser文件读取

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

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

 3.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();
    }
}

 3.3.优缺点

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

四,第二个csv读取和输出

1、通过FileReader(String fileName)读取整个文件,并通过BufferedReader(Reader in)作为每行的缓冲;
2、在通过readLine()读取每行内容,通过空格作为分隔符,每行转为数组,并存在List<String[]>列表中;
3、最后打印 csv文件中的内容。

  • 4.1csv 文件内容如下:

  • clk 101 111
    reset 102 112
    test 103 113
    Mode1 104 114
    Mode0 105 115

     
  • 4.2打印的代码如下:

  • import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    public class transform {
        List<String[]> ReadMethod(){
            String File = "C:/Users/zeal.zhang/Documents/ExamB/src/Data/1.csv";
            String line = "";
            String SplitBy = " ";
            String[] Line;
            List<String[]> BikeDataList = new ArrayList<>();
            try (BufferedReader br = new BufferedReader(new FileReader(File))) {
                while ((line = br.readLine()) != null) {
                    Line = line.split(SplitBy);
                    BikeDataList.add(Line);
                    System.out.println("signal "+Line[0]+" {\n\tsite 1 { pogo = "+Line[1]+"; }" +
                                       "\n\tsite 2 { pogo = "+Line[2]+"; }\n}");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return BikeDataList;
        }
        public static void main(String[] args) {
            new transform().ReadMethod();
        }

     
  • 4.3输出的内容如下:

  • signal clk {
        site 1 { pogo = 101; }
        site 2 { pogo = 111; }
    }
    signal reset {
        site 1 { pogo = 102; }
        site 2 { pogo = 112; }
    }
    signal test {
        site 1 { pogo = 103; }
        site 2 { pogo = 113; }
    }
    signal Mode1 {
        site 1 { pogo = 104; }
        site 2 { pogo = 114; }
    }
    signal Mode0 {
        site 1 { pogo = 105; }
        site 2 { pogo = 115; }
    }
    写文章-CSDN创作中心icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/134809812?spm=1001.2014.3001.9457

  •  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值