Java文件读写和CSV文件解析(读取csv文件的一列或若干列)

文件类

Java 读文件流的知识不可少,先复习一下吧!

OREACLE JDK8 DOCS

文件类是Java IO的一个对象,用于指定文件的相关信息,位置和名称信息。如txt文件,csv文件对Java来说就是一个文件类。

在这里插入图片描述
开发手册中指出,文件类对象的第一个参数是一个pathname路径名,在windows下就是例如:
D:\Java\apache-tomcat-8.5.84另外还指出\在Java中为转义字符需要使用\\那么路径名就变成了C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv

File类也提供了若干方法获取路径信息:

方法描述
getName()获取dictionnary
getPath()获取完整路径名

这个File只用于存储路径信息,并无实际操作。

文件类IO

在Java中一个文件可以被两种方法读取,字节流或字符流。这里介绍字符流。

在字符流字符输入和输出流分别对应ReaderWriter,一个是读文件一个是写文件。对文件操作的实现类是FileReader,用该对象即可实现文件的读取。FileWriter是文件写入实现类。

文件流读取

FileReader的继承关系如下:
在这里插入图片描述

在这里插入图片描述

FileReader构造方法可以用于指定编码,创造FileReader对象。

FileReader fileReader = new FileReader("C:\\Users\\fireapproval\\Desktop\\数据集\\test1.csv");

在这里插入图片描述
如图所示,FilReader对象提供的方法是没办法获取文件内容的。需要通过字符流获取。

字符流转换

Java提供了BufferdReader类来操作文件流,如下:

在这里插入图片描述
BufferdReader的构造方法的第一个参数是Reader字符流,那么它就可以操作任何继承了该接口的实现类。

BufferdReader读取文件流:
在这里插入图片描述
该字符流中提供了readLine()方法读取文件一行内容。

 @Test
    public void method5(){
        try {
            FileReader fileReader = new FileReader("C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv");
            System.out.println(fileReader);
            BufferedReader reader = new BufferedReader(fileReader);
            System.out.println(reader.readLine());

        }catch (IOException e){
            e.printStackTrace();
        }
    }

在这里插入图片描述
如图所示已经成功读取。该对象只能一行一行读取。

需要注意的该对象读取文件会自动记录行数,从前往后依次读取。

例如使用reader对象读取,会自动换行:

BufferedReader reader = new BufferedReader(fileReader);
            System.out.println(reader.readLine());
            System.out.println(reader.readLine());
            System.out.println(reader.readLine());

在这里插入图片描述

文件流写入
FileWriter fileWriter = new FileWriter(new File("D://profile//test.csv"));

在这里插入图片描述

如何可以看到FileWriter的对象提供了诸如append(),write(),close()方法,向文件中写入内容。

@Test
public void method5(){
    try {
        FileWriter fileWriter = new FileWriter(new File("C:\\Users\\fireapproval\\Desktop\\数据集\\test.txt"));
        fileWriter.write("Hello World");

    }catch (IOException e){
        e.printStackTrace();
    }
}

csv文件解析

对csv文件解析首先要了解csv文件的结构,还不清楚结构请移步Java操作redis数据库之读取csv文件开头有文件结构。

读取csv文件指定列
public class ReadCSV {

    BufferedReader br=null;
    String line = null;

    public ReadCSV(){}

    //获取某一列返回数组
    public List<String> getOneColumn(String path,int column){   //参数为路径和指定列
        //该列表用于存储读取的指定列元素
        ArrayList arrayList = new ArrayList();

        try {
            br = new BufferedReader(new FileReader(path));

			/* 不需要标头执行此行
			line = br.readLine();
			*/
			//循环读取每行的指定列元素
            while ((line = br.readLine()) != null) {
                //","分割每行第column列
                //System.out.println(line.split(",")[column]);
                String a= line.split(",")[column];
                if(a !=null && a !=""){arrayList.add(a);}
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return arrayList;
    }

具体思想是:循环读取文件每一行,以,分割为数组,再读取数组的指定列,直至循环结束。

演示csv文件如下:
在这里插入图片描述

读取第7列:

    @Test
    public void method6(){

        ReadCSV readCSV = new ReadCSV();
        List<String> maps = readCSV.getOneColumn("C:\\Users\\fireapproval\\Desktop\\数据集\\test1.csv", 7);
        System.out.println(maps);

    }

在这里插入图片描述

读取csv文件若干列
public List<ArrayList> readTwoColumn(String path,int column1,int column2){
        List<ArrayList> list = new ArrayList<>();
        try {
            br = new BufferedReader(new FileReader(path));

            br.readLine();
            while ((line = br.readLine()) != null) {
                //","取出任意两列
                //System.out.println(line.split(",")[column]);
                String columnOne= line.split(",")[column1] ;   //取column1列
                String columnTwo = line.split(",")[column2];   // 。。。

                if(columnOne != "" && columnTwo !=""){
                    ArrayList arrayList = new ArrayList();
                    arrayList.add(columnOne);
                    arrayList.add(columnTwo);
                    list.add(arrayList);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return list;
    }

读取几列定义几个参数即可。

演示:

    @Test
    public void method6(){

        ReadCSV readCSV = new ReadCSV();
        List<ArrayList> maps = readCSV.readTwoColumn("C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv", 7, 9);

        System.out.println(maps);

    }

在这里插入图片描述

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Python 中,可以使用 csv 模块来读取 CSV 文件并提取其中的某几列。 下面是一个简单的示例,展示了如何提取 CSV 文件中的第一列和第三列: ``` import csv # 打开 CSV 文件 with open('data.csv', 'r') as f: # 创建 CSV 阅读器 reader = csv.reader(f) # 读取每行数据 for row in reader: # 提取第一列和第三列数据 col1 = row[0] col3 = row[2] # 处理数据 ... ``` 注意:上面的代码假设 CSV 文件中的每行数据都是用逗号分隔的。如果 CSV 文件使用其他字符来分隔数据,那么可以使用 csv.reader() 的 delimiter 参数来指定分隔符。 例如,如果使用分号来分隔数据,可以这样创建 CSV 阅读器: ``` reader = csv.reader(f, delimiter=';') ``` 如果想要更高级的 CSV 处理功能,可以使用 pandas 库。 Pandas 可以轻松地读取 CSV 文件,并提供了丰富的数据分析功能。 ### 回答2: Python中可以使用pandas库来读取和处理CSV文件。要提取CSV文件中的某几列,可以通过指定列名或列索引来实现。 首先,需要安装pandas库。可以使用以下命令来安装pandas: ``` pip install pandas ``` 接下来,导入pandas库并使用`read_csv()`函数读取CSV文件: ```python import pandas as pd df = pd.read_csv('file.csv') ``` 在上述代码中,`file.csv`是CSV文件的路径,读取后的数据将保存在名为`df`的DataFrame对象中。 如果要提取某几列,可以通过列名的方式: ```python cols = ['column1', 'column2', 'column3'] selected_columns = df[cols] ``` 在上述代码中,`cols`是一个列表,包含要提取的列名。`selected_columns`是一个新的DataFrame对象,包含了所选的列。 如果要提取某几列,可以通过列索引的方式: ```python cols = [0, 1, 2] selected_columns = df.iloc[:, cols] ``` 在上述代码中,`cols`是一个列表,包含要提取的列索引。`selected_columns`是一个新的DataFrame对象,包含了所选的列。 最后,可以使用`to_csv()`函数将提取的列保存为新的CSV文件: ```python selected_columns.to_csv('new_file.csv', index=False) ``` 在上述代码中,`new_file.csv`是保存新CSV文件的路径。`index=False`参数表示不保存DataFrame对象的索引。 以上就是使用Python提取CSV文件某几列的方法。使用pandas库可以方便地进行数据操作和处理。 ### 回答3: 在Python中,我们可以使用csv模块提取CSV文件中的某几列数据。首先,我们需要使用`csv.reader()`函数读取CSV文件,并指定分隔符。然后,我们可以使用索引来获取某一列的数据。 下面是具体的步骤: 1. 导入csv模块: ``` import csv ``` 2. 打开CSV文件,使用`csv.reader()`函数读取文件内容: ``` with open('file.csv', 'r') as file: reader = csv.reader(file, delimiter=',') rows = list(reader) ``` 3. 选择需要提取的列的索引,例如,我们提取第2列和第4列的数据: ``` column_2 = [row[1] for row in rows] column_4 = [row[3] for row in rows] ``` 4. 如果需要将数据写入新的CSV文件,可以使用`csv.writer()`函数创建一个新文件,并将提取的列写入文件中: ``` with open('new_file.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerows(column_2) writer.writerows(column_4) ``` 以上就是使用Python提取CSV文件中某几列数据的方法。如果想要提取其他列,只需调整索引即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值