Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别

2023-11-19

一、Java读取和存储文件数据流

Java读取文件,实际是将文件中的字节流转换成字符流输出到屏幕的过程

 

这里面涉及到两个类:InputStreamReader和OutputStreamWriter

InputStreamReader:将字节流转换成字符流

OutputStreamWriter:将字符流转换成字节流

 

InputStreamReader继承Reader类

OutputStreamWriter继承Writer类

 

二、BufferedReader/FileReader/InputStreamReader

Reader是用于将文件中的内容读出来;Writer用于将字符写入到文件中去。

Reader是用于读取字符流的抽象类

1、BufferedReader/FileReader/InputStreamReader的继承关系如下:

所以通过BufferedReader/FileReader/InputStreamReader这三个方法读出来的文件,都可以直接输出字符

2、BufferedReader/FileReader/InputStreamReader的使用方法及区别

InputStreamReader:可以指定字符编码格式,入参传递InputStream对象

InputStream对象定义方法有两种。System.in或FileInputStream对象

System.in:读取控制台的输入内容

FileInputStream:可通过文件路径名pathname或File对象实例化

InputStreamReader inputstreamreader1=new InputStreamReader(System.in);
InputStreamReader inputstreamreader2=new InputStreamReader(new FileInputStream("/opt/xxx"));
InputStreamReader inputstreamreader3=new InputStreamReader(new FileInputStream(new File("/opt/xxx")));

 

FileReader:入参直接传递文件pathname或File对象

FileReader是InputStreamReader的子类,不能指定字符编码,其他与InputStreamReader基本类似

FileReader f1=new FileReader("/opt/xxx.txt");
FileReader f2=new FileReader(new File("/opt/xxx.txt"));

 

BufferedReader:入参有Reader对象和缓冲区大小(可不写)

从缓存区中读取字符流,提高效率;缓冲区大小:默认8192,默认不需要传递

建议都要用这个类去读取文件

BufferedReader buffered_filereader=new BufferedReader(new FileReader(filename));
BufferedReader buffered_inputstreamreader=new BufferedReader(new InputStreamReader(fileinputstream));

 

三、FileInputStream

所有字节输入流的超类,用于字节流的读取。

上面已经讲了,应用在实例化InputStreamReader对象时的一种入参

 

可以传递文件路径名pathname或File对象实例化

 

四、读取文件

BufferedReader对象使用readLine()方法判断字符串是否为null判断是否为文件末尾

String read;
while((read=buffered_filereader.readLine())!=null){
    System.out.println(read);
}

 

Reader子类InputSteamReader和FileReader使用read()方法判断是否为-1,来判断是否为文件末尾

int i;
while ((i=filereader.read())!=-1){
    System.out.print((char)i);
}

 

五、Java代码

1、InputSteamReader

复制代码

String filename="/opt/xxx.log";
 
FileInputStream fileinputstream=new FileInputStream(filename);
InputStreamReader inputstreamreader=new InputStreamReader(fileinputstream);
int i;
while ((i=inputstreamreader.read())!=-1){
    System.out.print((char)i);
}

复制代码

 

2、FileReader

复制代码

String filename="/opt/xxx.log";
 
FileReader filereader=new FileReader(filename);
int i;
while ((i=filereader.read())!=-1){
    System.out.print((char)i);
}

复制代码

 

3、BufferedReader(入参FileReader)

复制代码

String filename="/opt/xxx.log";
 
FileReader filereader=new FileReader(filename);
BufferedReader buffered_filereader=new BufferedReader(filereader);
String read;
while((read=buffered_filereader.readLine())!=null){
    System.out.println(read);
}

复制代码

 

4、BufferedReader(入参InputStreamReader)

复制代码

String filename="/opt/xxx.log";
FileInputStream fileinputstream=new FileInputStream(filename);
InputStreamReader inputstreamreader=new InputStreamReader(fileinputstream);
BufferedReader buffered_inputstreamreader=new BufferedReader(inputstreamreader);
String read;
while((read=buffered_inputstreamreader.readLine())!=null){
    System.out.println(read);
}

复制代码

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

Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别 的相关文章

  • c++/cuda并行累计求和

    文章目录 代码 CMakeLists txt 结果 代码 include
  • 设计模式-建造者模式

    文章目录 建造者模式 创建复杂对象的优雅方式 什么是建造者模式 建造者模式的使用场景 优缺点 示例 使用建造者模式创建电脑对象 建造者模式 创建复杂对象的优雅方式 在软件开发中 有时候我们需要创建具有复杂结构和多个组件的对象 直接在客户端代
  • 【Pytorch异常笔记】Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

    文章目录 异常描述 解决方法 开发环境 异常描述 OMP Error 15 Initializing libiomp5md dll but found libiomp5md dll already initialized OMP Hint
  • git 和远程服务器关联,Git远程服务器连接被拒绝

    我对这个错误感到疯狂 2天后我没有发现我的系统出了什么问题 我相信修复它非常容易 Git远程服务器连接被拒绝 当我尝试使用Git功能我得到的消息 连接到我的git服务器 无法打开连接 主机不存在 致命的 无法从远程存储库中读取 请确保您拥有
  • Android JNI1--C语言基础

    1 include 相当于java的导包操作 例如 include
  • vue中computed的属性对data中的属性赋值为undefined的原因

    场景 我在computed中return了一个值 然后在data中直接将它复制给另一个属性 结果data中的属性值为undefined 代码示例 timer为undefined 原因 在这里很容易想到是执行顺序的问题 computed中的属
  • sql server 中的日期计算,如当天周的第一天,当前月的第一天

    根据给定的日期 计算该日期在本月所在周数 每周的第一天为周日 但是在月末需要与下个月进行衔接 如 图2012年2月份 3月份的1 2 3号为2月份的第4周 而2月份的1 2 3 4为1月份的最后一周 第五周 declare datetime
  • linux线程间通讯----管道、信号

    进程间通讯机制 unix继承 管道 信号 system V IPC对象 共享内存 消息队列 信号灯集 1 管道 管道分为无名管道和有名管道 区别在于创建的管道是否在文件系统中不可见 无名不可见 有名可见 1 无名管道 特点 1 在创建之后再
  • 系统调用详解

    1 系统调用 1 系统调用就是为了让应用程序可以访问系统资源 每个操作系统都会提供一套接口供应用程序使用 这些接口通常通过中断来实现 例如在windows中是0x2E号中断作为系统调用入口 linux使用0x80号中断作为系统的调用的入口
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • typeScritp的高级函数

    1 交叉类型 交叉类型是将多个类型合并为一个类型 这让我们可以把现有的多种类型叠加到一起成为一种类型 它包含了所需的所有类型的特性 例如 Person Serializable Loggable同时是 Person 和 Serializab
  • BSN唐斯斯:区块链是“新基建中的基建”

    5月16日 19 00 陀螺财经特别邀请到国家信息中心智慧城市发展研究中心副主任 区块链服务网络发展联盟常务副秘书长唐斯斯 为大家带来关于新基建下的区块链新机遇的思考 直播主题 新基建下的区块链新机遇 嘉宾 国家信息中心智慧城市发展研究中心
  • 智慧城管项目可行性研究报告

    后台回复 230915 可获得下载资料的方法 点击文后阅读原文 可获得下载资料的方法 欢迎加入智能交通技术群 联系方式 微信号18515441838
  • C语言中volatile关键字详解以及常见的面试问题

    编译器的优化 程序运行的优化可以分为硬件和软件 硬件上是在CPU和内存中间增加cache 来解决CPU和内存之间运行速率差异过大的问题 软件上则分为编译器优化和程序员优化 程序员优化是程序员在编写代码时 对代码的逻辑顺序进行合理安排 提升效
  • WIN10 修改用户下文件夹的名称

    转载note 我是为了解决正当防卫3不能存档 我的用户名当初设置的数字 转载的原因是 走了很多百度知道和经验的弯路 如果有人看到就别走了 我因为走了弯路前弄后弄导致原先的个人数据文件还丢失 只得跳出步骤新建用户 在PE下复制还有的数据 所以
  • 在windows系统安装linux

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 说明 二 步骤 1 利用WindowsADK安装windows 1 Windows 评估和部署工具包 ADK 包括 CopyPE 和 MakeWinPEM
  • no matching host key type found. Their offer: ssh-rsa 问题解决

    最近升级了Mac OS Ventura 13 0 1后发现ssh指定密钥登录服务器失败 no matching host key type found Their offer ssh rsa 进入当前用户的 ssh目录发现比之前系统多了一个
  • Ubuntu20.04安装qemu错误解决方法

    1 如果运行 configure显示没有找到pip sudo apt get install phthon3 pip 2 如果运行 configure显示 ninja error opening build log Permission d
  • com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别

    com mysql jdbc Driver 是 mysql connector java 5中的 com mysql cj jdbc Driver 是 mysql connector java 6中的 1 JDBC连接Mysql5 com
  • [共同学习] 平衡二叉树浅见

    平衡二叉树 平衡二叉树的概念 AVL树结点的定义 AVL树的插入 左左 右单旋 右右 左单旋 左右 先左旋 再右旋 右左 先右旋 再左旋 AVL树的验证 验证其为二叉搜索树 验证其为平衡树 AVL树的性能 AVL树的实现 感悟 以上 二叉搜

随机推荐

  • 三分钟实现一个react-router-dom5.0的路由拦截(导航守卫)

    不同于vue 通过在路由里设置meta元字符实现路由拦截 在使用 Vue 框架提供了路由守卫功能 用来在进入某个路有前进行一些校验工作 如果校验失败 就跳转到 404 或者登陆页面 比如 Vue 中的 beforeEnter 函数 rout
  • element upload上传视频,获取本地url地址和时长

    获取视频的时长参考了文章 https www cnblogs com 65Seeker p 11466824 html 1 URL createObjectURL 静态方法会创建一个 DOMString 其中包含一个表示参数中给出的对象的U
  • SpringBoot项目中ModelMapper配置以及使用

    项目中对象与对象赋值转换使用的频率非常的高 比如数据库表实体对象 Entity 与业务类对象 Model 之间的赋值传递 或者模型对象 Model 与视图对象 ViewModel 之间的赋值传递 如果我们一个一个字段的赋值 将是非常繁琐并且
  • vue+element -UI前端Excel 文件导入数据

    完成的效果图如下 会进行数据筛选 根据你上传的物业名称跟数据库的名称对应 在这里我用到了一个插件 需要在在main js中全局引入 import export excel to json export json to excel from
  • linux之命名空间

    1 什么是命名空间 Linux中的命名空间 namespaces 是一种轻量级的虚拟化技术 ps docker就是依赖这个原理实现的 让进程看起来像是在自己的独立系统中运行 也就是说进程只能看到相同命名空间内的进程和资源 而看不到其他命名空
  • PG向表中添加新列时判断存在性

    以下是可以在命令行中执行的 SQL 语句 用于向表中添加新列并判断存在性 DO BEGIN BEGIN ALTER TABLE your table name ADD COLUMN IF NOT EXISTS your column nam
  • 服务器torchserver部署全流程踩坑记录

    服务器torchserver部署全流程踩坑记录 部署结果展示 一 Python环境 一 创建虚拟环境 二 安装torch cuda等 三 Python环境移植 二 java jdk环境 一 java jdk安装 1 sudo安装 需要sud
  • 使用selenium爬取唯品会

    使用selenium爬取唯品会 1 基本步骤 2 通过程序控制浏览器下拉滚动条获取加载信息 3 完成这个爬虫程序 使用selenium爬取动态加载的网页 爬取唯品会的商品 1 基本步骤 首先 创建一个浏览器驱动driver 查看唯品会页面u
  • 我的世界服务器聊天显示坐标,我的世界端游怎么显示坐标

    手机游戏cf的VIP等级会显示在最终游戏CF上吗 H 是的 无需感谢 我的世界如何环绕 单击显示不坐吗 前提是必须有一个区域插件 用木斧对角指向两个点 住所 牛仔竞技插件 您只能绘制自己的区域 其他 无法破坏或改变您的领土 每个玩家可以拥有
  • OpenCV机器视觉-识别红绿颜色

    识别红绿颜色 识别车道线 车道线检测 使用opencv来完成一个车道线检测的案例 完成这样的案例我们需要经历哪些步骤呢 我们先来思考一下解决问题的思路 当前情况下 摄像头拍出了很多的东西 例如路边的杂草远方的山 但是在我们自动驾驶的过程中
  • 【华为OD机试真题】补种未成活胡杨(C&C++&java&python&JavaScript&go)100%通过率【2023(B卷)100分】

    补种未成活胡杨 题目描述 近些年来 我国防沙治沙取得显著成果 某沙漠新种植 N 棵胡杨 编号 1 N 排成一排 一个月后 有 M 棵胡杨未能成活 现可补种胡杨 K 棵 请问如何补种 只能补种 不能新种 可以得到最多的连续胡杨树 输入描述 N
  • 【Android】Android ANR产生过程与分析方法

    前言 Android ANR问题一直是比较难解决的问题 一来它比较难以复现 二来复现后也不太好分析 这篇文章梳理一下ANR产生的过程以及出现ANR拿到日志文件如何定位原因 其实关于ANR线上监控也是比较棘手的 看了这篇文章我们再去看一些AN
  • linux内存调节之CMA

    本文贴代码过头了 以后想起来再优化一下吧 目录 概述 数据结构 构建初始化 DTS CONFIG DMA CMA 页表与物理页初始化 分配器激活 分配器使用 CMA部署 实战 概述 CMA Contiguous Memory Allocat
  • 小松的STM32教程(13)—— 驱动外部内存24C02

    预备 学习目标 概述 24cxx c include 24cxx h include delay h include delay h void IIC Init void GPIO InitTypeDef GPIO InitStructur
  • 数据结构之图的两种遍历实现(C语言版)

    上一期文章分享完了图的两种遍历方式 也是两种很重要的算法 DFS和BFS 这两种算法的应用和重要性我就不多说了 内行的人懂的都懂 今天这文章重要就是来上机实现这两种算法 又由于这两种算法都可以由邻接矩阵和邻接表来表示 博主分享的代码都是上机
  • pytorch c10.dll找不到

    import torch optim as optim File D Python38 lib site packages torch init py line 135 in
  • Matlab 编辑器框与命令行框视图分开两个窗口

    之前不知道怎么弄的 将matlab编辑器视图和命令行视图变成了两个窗口 效果如下图 这样调试代码我很不适应 点了好久才发现这叫停靠 点击编辑器窗口右上角 选择停靠 就能将编辑器窗口与命令行窗口在同一界面上
  • EduCoder_web实训作业--文本层次语义元素

    第一关 A D B B 第二关 strong 重要通知 strong
  • php GD库的使用

    两大功能 自己画 对于原有图片改变 PHP中GD库的使用 PHP 不仅限于只产生 HTML 的输出 还可以创建及操作多种不同格式的图像文件 PHP提供了一些内置的图像信息函数 也可以使用GD函数库创建新图像或处理已有的图像 目前GD2库支持
  • Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别

    一 Java读取和存储文件数据流 Java读取文件 实际是将文件中的字节流转换成字符流输出到屏幕的过程 这里面涉及到两个类 InputStreamReader和OutputStreamWriter InputStreamReader 将字节