小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

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

Java,java,jvm,tomcat 额外说明

收录于:23天前

文件类

Java中读取文件流的知识是必不可少的,我们先回顾一下!

ORACLE JDK8 文档

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

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

File类还提供了几种获取路径信息的方法:

方法 描述
获取名称() 获取字典
获取路径() 获取完整路径名

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

    }

在这里插入图片描述

. . .

相关推荐

额外说明

java lambda表达式中foreach中设置多个属性值

list.forEach((entity) ->{ entity.setCreateTime(new Date());

额外说明

C语言编写的几个加密文件的函数

//EnDecrypt.h 头文件 #include <string> //文件加解密接口 bool EncryptFile(std::wstring strFileName, std::wstring strFileEn); bool DecryptF

额外说明

Python数据分析读取常用库

Python数据分析读取常用库 文章目录 Python数据分析读取常用库 前言 一、为什么使用Numpy? 1.数据读取 1.1 json读取文件 1.2 pandas读取文件 1.2.1pandas常用数据结构 1.2.2 pandas读取csv文件

额外说明

java水果摊增删改查(集合与IO流的配合)

项目名 水果摊售货系统 项目描述 该系统类似于超市收银系统,由收银员操作,包括添加商品进购物车,结账以及找零 控制台界面 具体功能 查看水果列表 购买水果 可以是输入水果名,也可以是输入水果编号 查看购物车 结账 退出 要求 使用数组或集合完成数据存储

额外说明

MySQL存储函数,值得一看

写在前面: 跟随B站的康师傅学习mysql的笔记摘要和自我总结。 1、创建存储函数 语法格式: CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回值类型 BEGIN 函数体 #函数体中肯定有 RETURN 语

额外说明

Unity零基础到入门 ☀️| 万字教程 对 Unity 中的 Navigation导航系统基础 全面解析+实战演练【收藏不迷路】

-博客主页:https://blog.csdn.net/zhangay1998 -欢迎点赞 - 收藏 ⭐留言 - 如有错误敬请指正! -本文由 呆呆敲代码的小Y 原创,首发于 CSDN- -未来很长,值得我们全力奔赴更美好的生活✨ 目录 -前言 ❤️Un

额外说明

【Mybatis】常见面试题:字段名和属性名不一致时三种处理方式

问题引出: 在使用Mybatis操作数据库时:在类中属性的命名方式通常我们采用驼峰式empName命名,但是在数据库中的字段名我们通常使用emp_name来命名,这就导致属性名和字段名不一致,在查询时就会出现查询不到数据 解决方式: 方式一: 为字段起别

额外说明

随机分一个整数

抢红包随机分钱 记录一下,代码还有问题,分的多了存在问题,需要修改。 import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; import java

额外说明

Java中,split()方法,在jdk1.6与之后版本的区别

split()方法在jdk1.6的描述:  split()方法在jdk1.9的描述: 两者区别是 当在此字符串的开始处存在正宽度匹配时,在结果数组的开始处包含空的前导子字符串。 开始时的零宽度匹配不会产生这样的空的前导子串。 区别是jdk为1.6的时候,

额外说明

安卓案例:View动画——弹球碰壁

安卓案例:View动画——弹球碰壁 一、运行效果

ads via 小工具