当前位置: 首页 > news >正文

Java学习-IO流-字符流-FileReader

Java学习-IO流-字符流-FileReader

字符流 = 字节流 + 字符集
输入流:默认一次读一个字节,遇到中文时一次读多个字节
输出流:底层把数据按照指定编码方式编码,变成字节写入文件
使用场景:纯文本文件读写

//                  IO流体系
//                 ↙       ↘
//          字节流              字符流
//         ↙   ↘             ↙   ↘
//InputStream OutputStream Reader Writer
//         字符流
//        ↙   ↘
//  Reader	     Writer
//     ↓           ↓
//FileReader	FileWriter

FileReader:操作本地文件的字符输入流
FileWriter:操作本地文件的字符输出流

FileReader

1.创建字符输入流对象
public FileReader(FIle file):创建字符输入流关联本地文件
public FileReader(String pathname):创建字符输入流关联本地文件
注:如果文件不存在,直接报错

2.读取数据
public int read():读取数据,读到末尾返回-1
public int read(char[] buffer):读取多个数据,读到末尾返回-1
注:按字节进行读取,遇到中文一次读多个字节,读取后解码,返回一个整数

3.释放资源
public int close():释放资源/关流

空参read()

例:
xx.txt :生活是默默地坚持,毅力是永久的享受。

FileReader fr = new FileReader("...\\xx.txt");
int ch;
while((ch=fr.read())!=-1){sout(ch+" ");
}
//→ 29983 27963 26159 40664 40664 22320 22362 25345 65292 27589 21147 26159 27704 20037 30340 20139 21463 12290
fr.close();

read()底层:
1.默认每次读取一个字节,遇到中文一次读取多个字节
2.读取之后,解码并转成十进制,作为返回值

FileReader fr = new FileReader("...\\xx.txt");
int ch;
while((ch=fr.read())!=-1){sout(char(ch));
}
//→ 生活是默默地坚持,毅力是永久的享受。
fr.close();

带参read()

FileReader fr = new FileReader("..\\xx.txt");
char[] chars = new char[2];
int len;
while((len=fr.read(chars))!=-1){sout(new String(chars,0,len));
}
//→ 生活 \n 是默 \n 默地 \n 坚持 \n ,毅 \n 力是 \n 永久 \n 的享 \n 受。
fr.close();

read()底层原理

空参read():读取数据,解码,返回数字
带参read():读取数据,解码,强转,放到数组中

字符输入流底层原理详解

1.创建字符输入流对象
底层:关联文件,并创建缓冲区,缓冲区大小8192字节
2.读取数据
底层:2.1.判断缓冲区中是否有数据可以读取
2.2.缓冲区中没有数据:从文件中获取数据,装到缓冲区,每次尽可能把缓冲区装满,如果文件中没有数据,返回-1
2.3.缓冲区中有数据:从缓冲区中读取数据
空参read():一次读取一个字节,遇到中文一次读取多个字节,把字结解码转成十进制返回
有参read():读取字节,解码,强转成字符存入数组

//xx.txt:8192个a + bcdefg
FileReader fr = new FileReader("..\\xx.txt");
fr.read();//8192个a存入缓冲区
FileWriter fw = new FileWriter("..\\xx.txt");//清空文件
int ch;
while((ch = fr.read())!=-1){sout(char(ch));}
fw.close();
fr.close();

只输出8192个a,这8192个a在文件清空之前已存入缓冲区;不会输出bcdefg,因为已经被清空。

http://www.lryc.cn/news/17748.html

相关文章:

  • python攻陷米哈游《元神》数据?详情请看文章。。
  • 【unity细节】基于unity子对象(如相机)为什么无法进行z轴的拖拽移动和z轴自动归位的问题
  • 如何维护固态继电器?
  • Sprng依赖注入(三):构造方法注入是如何工作的?
  • 「1」指针进阶——详解
  • JS语法让人困惑的点 “==与===”
  • 《狂飙》壁纸大嫂如此惊艳,做成日历壁纸天天看
  • 手机照片删除了怎么恢复
  • maven pom.xml 依赖的scope属性
  • git 的使用方法 (下 - 远程仓库和图形化)
  • Java基础:拼图小游戏
  • 一个跟蘑菇结缘的企业老板
  • 【Leetcode 剑指Offer】第 4 天 查找算法(简单)
  • Jenkins利用docker部署vue项目
  • 【Linux】如何将ntfs硬盘挂载到home目录下并具有读写权限
  • 拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素
  • yarn的global安装命令不生效
  • 如何发布自己的npm包?
  • 达梦数据库 闪回查询
  • java基础学习 day44(多态的优点和劣势)
  • Guna UI WinForms 2.0.4.4 Crack
  • 零售航母沃尔玛公布业绩:喜忧参半
  • Python学习笔记丨while、for、if循环结构基础知识与易错点
  • 【ROS学习笔记1】ROS快速体验输出Hello World
  • 复习git的使用
  • pip命令大全 含换源方法
  • 数据结构与算法之最短路路径与最短路径和动态规划
  • git 本地新建分支并进行合并
  • 2023年DAMA-CDGA/CDGP数据治理认证选择哪家机构好?
  • 浅析高速服务区交互一体机设备管理系统的建设与方向