使用io流一行一行读取txt文件

2023-11-04

io流分为字符流和字节流

字节流是万能流,可以处理任何数据,包含图片、视频、文字等,传输单位为字节

字符流只能读取文本数据,传输单位为字符

(一)“字节”的定义
字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。

(二)“字符”的定义
字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。

(三)“字节”与“字符”的区别
它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。
不同编码里,字符和字节的对应关系不同:
①ASCII码中:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

②UTF-8编码中:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

③Unicode编码中:一个英文字符等于两个字节,一个中文(含繁体)等于两个字节。
      符号:英文标点占一个字节;中文标点占两个字节。
      举例:英文句号“.”占1个字节的大小;中文句号“。”占2个字节的大小。

④UTF-16编码中:一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

⑤UTF-32编码中:世界上任何字符的存储都需要4个字节。

摘自https://www.cnblogs.com/chenmingjun/p/8118083.html

读操作用到输入流,写操作用到输出流

先来看字节流

InputStream和OutputStream

InputStream是输入字节流,常用的有FileInputStream和BufferendInputStream

InputStream作为字节流的基类,有几个通用的方法:
        read(byte[] b):从流中读取b的长度个字节的数据存储到b中,返回结果是读取的字节个数(当再次读时,如果返回-1说明到了结尾,没有了数据)
        read(byte[] b, int off, int len):从流中从off的位置开始读取len个字节的数据存储到b中,返回结果是实际读取到的字节个数(当再次读时,如果返回-1说明到了结尾,没有了数据)
        close():关闭流,释放资源。

 

FileInputStream继承了InputStream抽象类

FileInputStream主要用来操作文件输入流,它除了可以使用基类定义的函数外,它还实现了基类的read()函数(无参的):

        read():从流中读取1个字节的数据,返回结果是一个int,(如果编码是以一个字节一个字符的,可以尝试转成char,用来查看数据)。

BufferendInputStream不是InputStream的直接子类,是InputStream的子类FilterInputStream的子类

带有缓冲的意思,普通的读是从硬盘里面读,而带有缓冲区之后,BufferedInputStream已经提前将数据封装到内存中,内存中操作数据要快,所以它的效率要要非缓冲的要高。它除了可以使用基类定义的函数外,它还实现了基类的read()函数(无参的):

        read():从流中读取1个字节的数据,返回结果是一个int,(如果编码是以一个字节一个字符的,可以尝试转成char,用来查看数据)。

再来看字符流

Reader和Writer

Reader是输入字节流,常用的有Reader、BufferendReader、InputStreamReader、FileReader


    Reader是字符输入流的抽象基类 ,它定义了以下几个函数:
            read() :读取单个字符,返回结果是一个int,需要转成char;到达流的末尾时,返回-1
            read(char[] cbuf):读取cbuf的长度个字符到cbuf这种,返回结果是读取的字符数,到达流的末尾时,返回-1
            close()  :关闭流,释放占用的系统资源。


    InputStreamReader 转换流。可以把InputStream中的字节数据流根据字符编码方式转成字符数据流。它除了可以使用基类定义的函数,它自己还实现了以下函数:
        read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1


    FileReader 可以把FileInputStream中的字节数据转成根据字符编码方式转成字符数据流。


    BufferedReader可以把字符输入流进行封装,将数据进行缓冲,提高读取效率。它除了可以使用基类定义的函数,它自己还实现了以下函数:
        read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1
        readLine() :读取一个文本行,以行结束符作为末尾,返回结果是读取的字符串。如果已到达流末尾,则返回 null

 

 

练习一下吧

package com.cn;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 读取txt文件
 * 一次读一行
 * @author ylq
 *
 */
public class BufferendReaderDemo {
	
	
	public static void main(String[] args) {
		//文件路径
		String filePath="E:/hh.txt";
		
        File file=new File(filePath);
        
        BufferedReader reader = null;//字符输入流进行读取操作读取
       
        String tempString = null;//每一行的内容
        
        int line =1;//行号
        
        try {
        	//输入字节流,FileInputStream主要用来操作文件输入流
        	FileInputStream intput = new FileInputStream(file);
        	
            // System.out.println("以行为单位读取文件内容,一次读一整行:")
        	//InputStreamReader是转换流,将字节流转成字符流
            reader = new BufferedReader(new InputStreamReader(intput));
            
            while ((tempString = reader.readLine()) != null) {
                System.out.println("第"+ line + "行:" +tempString);
                line ++ ;
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

	}

}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用io流一行一行读取txt文件 的相关文章

  • instanceof,isInstance,isAssignableFrom的区别,以及isAssignableFrom()详解

    一 isAssignableFrom详解 这个方法我觉得是不好理解 感觉命名不对劲 不知道是不是错觉 Class类的isAssignableFrom Class cls 方法 如果调用这个方法的class或接口 与 参数cls表示的类或接口
  • Java中参数的传递机制,究竟是值传递还是引用传递?

    先说结论 Java语言中 本质上只有值传递 没有引用传递 废话不说 咱们直接来看例子 public class Demo public static void main String args int i 10 testInt i Syst
  • Java中的抽象类和接口

    目录 一 什么是抽象类 抽象类在实现多态中的意义 二 接口是什么 通过接口实现多态 三 抽象类和接口的区别 各位铁汁们大家好呀 今天让我们继续学习java 看看java中的抽象类和接口到底是什么 一 什么是抽象类 我们之前学过什么是类 那么
  • JAVA接收JSON中的数组

    入参数据示例 respCode 0000 respMsg 请求成功 bizSeqNo 22022120001184432418054888526616 transTime 20220221180548 success true tokenA
  • 值传递与引用传递的区别

    一 值传递 是指在调用函数时将实际参数复制一份传递到函数中 这样在函数中如果对参数进行修改 将不会影响到实际参数 代码在内存中的执行流程 1 首先加载main方法 2 接下来int number 100 3 输出调用前的number 结果为
  • Java 解析http返回的xml数据

    Java 解析http返回的xml数据 写成txt文件 需求 每小时抓取给定api接口返回的xml数据 把xml数据保存为XML文件 把xml数据转换txt文件格式数据 保存txt文件 文件名以yyyyMMddHH0000 txt和yyyy
  • Java五子棋详细步骤及完整代码

    五子棋 1 定义声明一个二维数组做棋盘 import java util Scanner public class Main public static void main String args 定义声明一个二维数组作为棋盘 int ga
  • 日志-Log4J

    日志 程序中的日志可以用来记录程序在运行的时候点点滴滴 并可以进行永久存储 日志和输出语句的区别 输出语句 日志技术 取消日志 需要修改代码 灵活性比较差 不需要修改代码 灵活性比较好 输出位置 只能是控制台 可以将日志信息写入到文件或者数
  • 多态(polymorphic)

    目录 1 多态的基本介绍 2 多态实现条件 3 重写 重写的介绍 重写和重载的区别 动 静态绑定机制 5 向上转型和向下转型 向上转型 向上转型的特点 总结 向下转型 多态的优缺点 多态是Java三大基本特征中最抽象也是最重要的特征 多态是
  • JAVA字符串的两种定义方式的区别

    关于JAVA中两种字符串定义方式的区别 第一次写 就当复习总结一下 希望能帮到需要的人吧 我们知道在JAVA中 对于字符串的实例化方式有两种 直接赋值 String str Hello World 构造方法实例化 String str ne
  • jmeter实战案例

    一 前言 以前做了个抽奖活动的需求 需要做压测 只是简单帮助测试去做过压测 但没有自己从头到尾做过 最近再次碰到需要做压测 百度了一下使用教程 现在做个记录 以便以后做压测 直接借鉴教程 二 流程 1 启动jmeter 下载jmeter后
  • Java多态

    关于引用的进一步理解 交换值 因为Java方法在传递参数的时候都是值传递 那么如何通过方法实现2个数的值交换 明确 在传引用的时候 到底拿引用干了个啥 class Value public int a public class Test p
  • StringUtils常用方法+StringUtils详细介绍

    StringUtils用法 StringUtils详细介绍 博文来源 http yijianfengvip blog 163 com blog static 175273432201212221935832 public static vo
  • 什么?到现在你还不知道什么是 访问修饰限定符吗?

    导航小助手 前言 一 public 访问修饰限定符 二 private 访问修饰限定符 三 default 访问修饰限定符 3 1 包的概念 3 2 导入包中的类 3 3 自定义包 3 4 包访问权限 3 5 常见的包 四 protecte
  • Java字符串分析器

    package StruingTokenizer import java util StringTokenizer public class StringTokenizer public static void main String ar
  • java虚拟机+分隔符

    java 入门 java 虚拟机 1 java虚拟机的平台可移植性 只要将java虚拟机安装于不同平台 我们编译的 class 文件就可以运行 2 jdk java开发 3 jre java运行时环境 jdk jre 下载安装后必须在环境变
  • java Socket 简单实现客户端与服务器间通信(仿聊天室)

    java Socket TCP协议简单实现客户端与服务器间的通信 打赏 执行效果 启动服务器和3个客户端 进行群聊和私聊 执行过程 服务端 首先创建服务器套接字ServerSocket对象并绑定端口 启动服务器 然后ServerSocket
  • Scanner类用法(学习笔记)

    Scanner类用法 学习笔记 后续会补充 1 next 用法 package com yushifu scanner import java util Scanner util java工具包 Scanner类 获取用户的输入 Scann
  • Java的内省技术

    什么是内省 在计算机科学中 内省是指计算机程序在运行时 Run time 检查对象 Object 类型的一种能力 通常也可以称作运行时类型检查 不应该将内省和反射混淆 相对于内省 反射更进一步 是指计算机程序在运行时 Run time 可以
  • java I/0操作 FileWriter类

    package filewriter p1 import java io FileWriter import java io IOException public class FileWriterDemo 获取当前系统的换行符 获取指定键指

随机推荐

  • Spring Cloud服务框架版本升级--JDK10+Gradle4.9+Spring Boot 2.0+Finchley.SR1

    目标 原有版本升级为Spring Boot 2 0与Spring Cloud Finchley SR1 使用gradle管理工程 搭建注册 配置 网关与追踪框架 加入k8s api微服务 环境 IntelliJ IDEA 步骤 版本升级及其
  • 大数据毕业设计 电商用户行为数据分析可视化 - python

    文章目录 0 前言 一 背景描述 二 项目背景 三 数据来源 四 提出问题 五 理解数据 六 数据清洗 6 1缺失值处理 6 2查看数据 6 3一致化处理 6 4查看data user数据集数据类型 6 5数据类型转换 6 6异常值处理 七
  • 对接微信支付接口开发详细步骤

    1 第一步 我们需要从哪里入手 当然我们需要有微信商家账号怎样申请商家账号呢 当然还是需要有一个已经审核过的微信公众号 这样的话 首先你必须先有个审核通过的微信公众号 这里就不说怎么审核公众号了这个公众号比较好弄 如何申请微信商户号 如图
  • ORA-01578的处理

    某天一台数据库测试机出现 ORA 01578 虽说这是测试机但是这是客户用的 随便处理也不行 仔细研究一下 ORA 01578 ORACLE data block corrupted file 2 block 69449 ORA 01110
  • LeetCode(Python)—— 只出现一次的数字(简单)

    只出现一次的数字 概述 给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 你的算法应该具有线性时间复杂度 你可以不使用额外空间来实现吗 输入 2 2 1 输出 1 输入 4 1 2 1 2
  • [机缘参悟-77]:深度思考-《天道》中强势文化、弱势文化与人的行为模式的关系

    目录 一 文化属性与人的行为模式 二 强势文化与弱势文化 2 1 弱势文化的本质与其行为模式 2 2 强势文化的本质与其行为模式 三 强势文化造就强者 弱势文化造就弱者 一 文化属性与人的行为模式 文化 是一个广义词 它的概括面相当的广泛
  • 二分查找算法及其实例

    二分查找算法及其实例 问题一 二分查找 给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target 如果目标值存在返回下标 否则返回 1 示例 1 输入 nums 1 0
  • Win7连接网络打印机步骤

    Win7客户端添加网络打印机 1 进入打印机官网 先下载对应型号的打印机驱动 2 找到控制面板 gt 点击硬件和声音 gt 设备和打印机 3 点击添加打印机按钮 选择添加网络 无线或Bluetooth打印机 4 搜索可用的打印机 5 找到对
  • 2023中国民营100强投资趋势

    导读 根据民企注册地了解到 民企100强企业几乎一半分布在华东地区 其次分布在华南 华北和华中地区 从省份来看 广东 浙江是主要分布的省份 企业数量分别是19家 江苏省有14家 北京市有8家 上海市有7家 河北省 山东省各6家 关注公众号
  • taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1 render 函数 2 constructor 构造函数 3 在各个生命周期钩子函数中修改state的属性或者参数 4
  • 华为OD机试真题 (python)之支持优先级的队列

    题目描述 支持优先级的队列 实现一个支持优先级的队列 高优先级先出队列 同优先级时先进先出如果两个输入数据和优先级都相同 则后一个数据不入队列被丢弃 队列存储的数据内容是一个整数 输入描述 组待存入队列的数据 包含内容和优先级 输出描述 队
  • java corn 定时任务调度,每分钟执行一次,每半个小时执行一次

    java corn 表达式 每分钟执行一次 Scheduled cron 0 1 每半个小时执行一次 Scheduled cron 0 0 30 springboot 类 EnableScheduling Configuration Slf
  • 自定义截图方法,如何在RobotFrameWork的日志中显示

    用RobotFrameWork做UI自动化时 一般初学者都会选择第三方扩展库SeleniumLibrary进行UI自动化测试 随然已经封装许多浏览器操作方法 但在实际应用 某些方法还是不能满足我们的需求 于是乎 我们就舍弃SeleniumL
  • 以服务方式启动安防监控系统EasyNVR程序出现播放异常,是什么原因?

    EasyNVR安防视频监控平台的特点是基于RTSP Onvif协议 将前端设备统一接入 在平台进行转码 直播 处理及分发 在智慧安防视频监控场景中 EasyNVR可实现实时监控 云端录像 检索与回放 云存储 告警 级联等视频能力 极大满足行
  • 1.2 Ubauntu 使用

    一 完成VMware Tools安装 双击 VMwareTool 打开 Ubuntu 终端快捷键 Alt Control T 切换汉语的快捷键是Alt 空格 ls 打印出当前所在目录中所有文件和文件夹 cd 桌面 进入桌面文件夹 sudo
  • java生成有理数_第四届蓝桥杯Java B——有理数类

    有理数就是可以表示为两个整数的比值的数字 一般情况下 我们用近似的小数表示 但有些时候 不允许出现误差 必须用两个整数来表示一个有理数 这时 我们可以建立一个 有理数类 下面的 class Rational private long ra
  • Python-使用空值进行赋值-None

    0 摘要 在Python中 尤其是数组当中 对于一些异常值往往需要进行特殊处理 为了防止异常值与正常数据混淆 影响最终计算结果 常用的方法是将异常值置零或者置空 置零的方法较为简单 本文主要介绍如果对python中的数据进行置空 1 赋值为
  • 【TreeMap】-根据 key 或 value 排序

    1 根据 key 排序 引言 TreeMap 中key 可以自动对 String 类型或8大基本类型的包装类型进行排序 但是 TreeMap 无法直接对自定义类型进行排序 当我们想对对 TreeMap 中 key 中的自定义类型排序时 必须
  • 已解决:极品飞车9 Most Wanted无故跳出回桌面问题

    情况 1 可以进入游戏 2 新建用户 并可以进行第一项挑战赛 3 进行到某项赛事 生涯或挑战 时 再无法进去了 Loading 之后立即跳回桌面 程序结束 如果情况相同 那你可有救了 几经周折 找到这个地址 NEED For SPEED M
  • 使用io流一行一行读取txt文件

    io流分为字符流和字节流 字节流是万能流 可以处理任何数据 包含图片 视频 文字等 传输单位为字节 字符流只能读取文本数据 传输单位为字符 一 字节 的定义 字节 Byte 是一种计量单位 表示数据量多少 它是计算机信息技术用于计量存储容量