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

news2025/1/19 11:36:59

文件类

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);

    }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android实战场景 - 保存WebView中的图片到相册

去年同事写了一个 “在H5中保存图片到相册” 的功能&#xff0c;虽然有大致实现思路&#xff0c;实现起来也没问题&#xff0c;但是感觉同事考虑问题的很周全&#xff0c;当时候就想着去学习一下&#xff0c;但是项目太赶没顾得上&#xff0c;索性现在有时间&#xff0c;准备好…

2023-02-01 读书笔记:《有趣的统计》-1-基础知识

2023-02-01 读书笔记&#xff1a;《有趣的统计》-1-基础知识 75招学会数据分析 —— 2014 Doctor.Bruce Frey 序 统计学&#xff1a; 最初&#xff0c;用于确定某些事情发生的可能性&#xff1b;不断发展&#xff0c;根据样本数据准确推断总体数据特征的方法&#xff08;推…

c语言基础之分支和循环语句

c语言基础之分支和循环语句分支语句和循环语句什么是语句&#xff1f;if语句switch语句在switch语句中的 breakwhile循环while语句中的break和continuefor循环break和continue在for循环中do...while()循环goto语句写在最后&#xff1a;&#x1f4cc;————本章重点————&a…

全球疫情期间的校园招聘:可以学到的6个教训

疫情放开后&#xff0c;校园招聘逐渐回暖&#xff0c;谁能率先有效整合线上线下校招&#xff0c;企业将从一开始就处于战略领先地位。下面梳理了全球招聘团队在疫情期间的6个校招教训&#xff0c;希望对你有启发。01重新规划线上工具的应用玩法现如今&#xff0c;学生已通过网课…

【C++提高编程】vector容器详解(附测试用例与结果图)

目录1.vector容器1.1 vector基本概念1.2 vector构造函数1.3 vector赋值操作1.4 vector容量和大小1.5 vector插入和删除1.6 vector数据存取1.7 vector互换容器1.8 vector预留空间1.vector容器 1.1 vector基本概念 功能&#xff1a; vector数据结构和数组非常相似&#xff0c;…

【C++】类和对象(上)

文章目录1. 面向过程和面向对象的初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算对象的大小7.2 类对象的存储方式7.3 结构体内存对齐规则8. this指针8.1 this指针的引出8.2 this指针的特性…

性能技术分享|Jmeter+InfluxDB+Grafana搭建性能平台(二)

二、CentOS安装&#xff1a;方式一&#xff1a;把下载的.rpm包推送到服务器上&#xff1b;方式二&#xff1a;直接命令行安装#下载wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.1.x86_64.rpm#安装yum localinstall?influxdb-1.7.1.x86_64.rpm -y2.3 修改配…

三十一、RabbitMQ(2)

&#x1f33b;&#x1f33b; 目录一、RabbitMQ 入门及安装1.1 概述1.3 Erlang 安装1.2.1 安装下载1.2.3 安装依赖环境1.2.4 安装 Erlang1.2.4 Erlang安装成功1.3 安装 RabbitMQ1.5启动 rabbitmq 服务1.4 开启管理界面及配置1.5.1 设置配置文件二、RabbitMQWeb 管理界面及授权操…

【JVM】垃圾回收算法与分代回收

文章目录1. 垃圾回收算法概述2. 标记-清除算法3. 标记-复制算法4. 标记-整理算法5. 分代回收本文参考&#xff1a;深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff09; 1. 垃圾回收算法概述 根据判定对象消亡的角度来看&#xff0c;垃圾收集算…

基于PHP的学院社团管理系统

摘 要“互联网”的战略实施后&#xff0c;很多行业的信息化水平都有了很大的提升。但是目前很多学校日常工作仍是通过人工管理的方式进行&#xff0c;需要在各个岗位投入大量的人力进行很多重复性工作&#xff0c;这样就浪费了许多的人力物力&#xff0c;工作效率较低&#xff…

Python爬虫4-Scrapy爬虫框架入门了解

目录1、Scrapy爬虫框架介绍1.1 requests库和Scarpy爬虫的比较1.2 Scrapy爬虫的常用命令2、Scrapy爬虫基本使用2.1 步骤2.2 yield关键字的使用1、Scrapy爬虫框架介绍 安装Scrapy库&#xff1a;pip install scrapy 爬虫框架&#xff1a;是实现爬虫功能的一个软件结构和功能组件集…

手动挂载apex镜像

手动挂载apex镜像 1.loop设备 在类 UNIX 系统里&#xff0c;loop 设备是一种伪设备(pseudo-device)&#xff0c;或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。 这要先从mount的流程来理解&#xff0c;挂载操作&#xff0c;实际上就是把设备上的文件系统/目…

【MyBatis】核心配置文件,三大对象的作用域,#{}和${}的区别

1. environment环境:一般一个环境environment会对应一个SqlSessionFactory对象sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"),"另一个环境的id");// 数据库环境配置在这个标签里 // 这里的default表示默认使用的环…

Spring Security 源码解读 :基本架构及初始化

Spring Security 是基于web的安全组件&#xff0c;所以一些相关类会分散在 spring-security包和web包中。Spring Security通过自定义Servlet的Filter的方式实现&#xff0c;具体架构可参考官网Spring Security: Architecture 这里使用Spring Boot 2.7.4版本&#xff0c;对应Sp…

安某客滑块分析

本文仅供学习&#xff0c;不参与商业应用 目标连接&#xff1a; aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0 接口分析 刷新链接可以看到getInfoTp的接口&#xff0c;请求参数sessionId及dInfo是加密参数 返回的参数包含…

Cesium 生成terrain地形数据

Cesium 生成terrain地形数据 处理地形数据 由于CTB工具不支持DEM为NoData值和float的数据,所以需要对数据进行处理。 多个tif必须县合并镶嵌成一张tifpixeltype从float转为intNoData值处理为0我使用的是ArcGis10.5,打开ArcMap: 打开 ArcToolbox->Data Management Tools…

C语言基础知识(55)

C语言程序在不使用数组的情况下找到“N”个数字中的最大数字参考以下代码实现&#xff1a;#include<stdio.h>intmain(){int count 0;int numb1 0;int numb2 0;int i 0;printf("Enter count of numbers ");scanf("%d",&count);if(count <0){p…

HTTP绕WAF之浅尝辄止

0X00前言 最近参加重保&#xff0c;和同事闲聊时间&#xff0c;谈起来了外网&#xff0c;彼时信心满满&#xff0c;好歹我也是学了几年&#xff0c;会不少的。结果&#xff0c;扭头看完do9gy师傅的《腾讯 WAF 挑战赛回忆录》&#xff0c;就啪啪打脸了。说来惭愧&#xff0c;最…

【数据结构(5)】2.3 线性表的类型定义

文章目录1. 线性表的抽象数据类型定义2. 线性表的基本操作1. 线性表的抽象数据类型定义 数据对象&#xff1a;就是一些元素&#xff0c;元素的个数大于等于 0。数据关系&#xff1a;ai-1 是 ai 的前驱&#xff0c;同时 ai 是 ai-1 的后继&#xff0c;他们都属于集合 D 2. 线性…

1月的碎碎念,但是很有必要

从今年开始每个月会整理一个我生活的琐碎但觉得有必要的事&#xff0c;一来方便年底回顾&#xff0c;二来也希望这些事情对大家有也有些参考。 不高大上&#xff0c;但是希望某一天再看到的时候会觉得充满趣味。1.新的1年的1月开始了&#xff0c;想了很多计划&#xff0c;搬新办…