字节流、字节流、转换流、打印流
字节流、字节流、转换流、打印流
一. 字符流
- 概述:
字符流只能操作有文字的文件【纯文本文件】,
- 字符流的操作原理:
字符输入流: 先把字节从文件中读取出来(使用的字节流读的),根据文件的编码集把字节数变为对应的字符,把字符 读到内存中[解码的过程]
字符输出流: 先把输出的内容以字符形式写出,把字符根据流中的编码集变成字节数,(使用字节输出流)在把字节写 到目标文件【编码的过程】
- 注意 :
以后如果我们只是想单纯完成数据搬运的时候,直接使用字节流即可,因为效率高.
如果咱们在搬运数据的时候,需要认为查看,就是用字符流.
1.Reader[字符输入流]
- 概述:
在读取文本文件时对数据操作使用单位是字符的输入流就是字符输入流 他是字符输入流的顶层父类 他是一个抽象类定义字符输入流的共性功能 想要使用找他的子类设备不一样子类 就不一样
使用典型子类FileReader
- 共性功能:
int read():一次读取一个字符 返回值是读到的字符, 读取到文件末尾返回值-1.
int read(char[] ch): 一次读取多个字符,存储到char数组中, 返回值是读到的有效的字符个数,返回值 是-1也表示读取到文件末尾了.
close():关闭流
1.1 FileReader
- 概述:
是Reader的子类【孙子辈】,负责内存和磁盘之间字符的读取交互的流,它没有自己的功能,他的功能就是 Reader的功能。
- 构造方法
FileReader(File file):创建一个以file对象对应的文件为目标文件的字符输入流对象
FileReader(String path):创建一个以path路径对应的文件为目标文件的字符输入流对象
2.Write[字符输出流]
他是字符输出流的顶层父类,他是抽象类,定义了字符输出流的共性方法,不能使用自己方法【不能创建对 象】只有找子类对象来使用功能,子类根据不同的设备有不同子类。
常用子类:FileWriter
注意:字符输出流自带缓冲区。
- 常用方法
write(int c):写出单个字符到磁盘文件
write(String str):写出字符串到磁盘文件
write(char[] arr):写出字符数组的全部字符到磁盘文件
write(char[] arr, int offset, int len):写出字符数组的部分字符到磁盘文件
offset:写出的开始字符的索引值
len:写出的字符的长度【个数】
不能大于数组长度-开始索引【offset】
close():关闭流资源
flush():刷新缓冲区
2.1 FileWrite
- 概述
他是Writer的间接子类[孙子辈],负责完成内存和磁盘之间字符数据输出交互的流,他没有自己的功能,都是 Writer的功能
- 构造方法
FileWriter(File file): 创建以File对象对应的文件为目标文件的字符输出流对象
FileWriter(String path): 创建以path路径对应的文件为目标文件的字符输出流对象
- 注意事项
1、字符输出流创建对象的时候检查目标文件在磁盘中是否存在:
存在:不会自动的创建空白文件,但是会对文件做格式化处理
不存在:系统自动创建一个空白文件出来【文件所在目录必须存在】
- 追加功能
FileWriter(File file,boolean b):
FileWriter(String path,boolean b):
注意:参数b必须传入true为续写
二. 字符缓冲流[高效字符输入输出流]
- 概述:
就是用来给字符流提升效率的一个流,他可以理解为就是一个对普通字符流进行包装的工具流。本身没有操作 数据的功能,但是结构衍生了可以操作流的功能,属于他特有功能.分类:
字符输入缓冲流【BufferedReader】 增强普通字符输入流 FileReader
字符输出缓冲流【BufferedWriter】 增强普通字符输出流 FileWriter构造方法:
BufferedReader(Reader r) :创建一个提升指定字符输入流r的效率的字符输入缓冲流对象 BufferedWriter(Writer w) : 创建一个提升指定字符输出流w的效率的字符输出缓冲流对象特有方法:
字符输入缓冲流【BufferedReader】: String readLine():一次读取一行的数据【行不是屏幕上看到的行】 读取文件末尾的标志,返 回null 字符输出缓冲流【BufferedWriter】: newLine():换行 效果和写出字符串 "\r"或"\n
- 字符缓冲流高效的原理
字符输入缓冲流BufferedReader:
当使用字符输入缓冲流读取字符的时候,首先缓冲流对象在内存中创建一个8192大的字符数组,然后一次性的到目标 文件读取8192个字符回来存到字符数组中,然后内部的字符输入流每次根据调用的读取方法到字符数组中读取对应的 个数到内存中,减少了内存和目标文件(硬盘)的交互次数,提高效率。 字符输出缓冲流BufferedWriter 当使用字符输出缓冲流往外写字节的时候,首先缓冲流对象在内存中创建一个8192大的字符数组,字符输出流每次根 据调用write方法把要写出的字符数写到字符数组中,如果字符数组被写满了自动的一次性写到目标文件中【清空字 节数组再次的写】,减少了内存和目标文件(硬盘)的交互次数,提高效率。
三. 转换流[重点]
- 概述:
他是字符流子类,转换流本质是字符流,只能操作纯文本文件,他可以对字符流的编码集进行指定转换。
- 作用:
- 指定io流的操作的使用编码集
- 完成字节流和字符流的相互转换
- 分类
输入转换流【InputStreamReader】 字节流通向字符流的桥梁
输出转换流【OutputStreamWriter】字符流转为字节流的桥梁创建时候使用它提供的构造方法: InputStreamReader(InputStream is, String charsetName),传入一个字节输入流,把字节输入流 读取到的字节信息使用指定字符集名称转为字符.就可以避免读取操作的乱码.OutputStreamWrtier(OutputStream os, String charsetName),传入字节输出流,把要写出的字符 信息,使用指定字符集转为字节数据,再使用字节流把字节数据写到目标文件.避免写出数据是乱码的出现.
3.1 InputStreamReader【输入转换流】
//举例
// 创建字节输入流
FileInputStream fis = new FileInputStream("day20/c/2.txt");
String charsetName = "gbk"; // 读取的文件字符集是GBK, 是以GBK的方式读取字节,读取到java程序中.
InputStreamReader isr = new InputStreamReader(fis, charsetName); int i = 0; while ((i = isr.read()) != -1) { System.out.println((char)i); }isr.close();fis.close();
3.2 OutputStreamWriter[输出转换流]
//举例
FileOutputStream fos = new FileOutputStream("day20/c/3.txt", true);
String charsetName = "GBK"; // 使用指定字符集把要写的数据转为字节信息,此时写出时使用字符集是GBK,
OutputStreamWriter osw = new OutputStreamWriter(fos, charsetName);
osw.write('哈哈');
osw.write("是真爱");
osw.close();
fos.close();
}
- 总结:
1.如果操作IO操作文件字符集和java程序字符集一致的时候,就没有必要使用这两个流. 2.当IO操作字符集和Java程序不一致时,就要使用InputStreamReader读取文件,只要保证读取时指定
字符集和目标文件字符集一致即可. 写出时候就要使用OutputStreamWriter,,只要保证写出时指定字
符集和目标文件字符集一致即可无论是转换输入流,还是转换输出流, 指定字符集的时候,都是参考要操作的文件字符集来设置, 文件
是什么字符集,就指定什么字符集.
3.3 标准输入输出流
- 标准输入流
System.in:该流的类型为InputStream,属于是字节流,默认关联的设备为键盘,即数据源为键盘 如何提供标准输入的输入能力: 使用转换流InpuStreamReader可以包装成字符流,使用BufferedReader可以包装成缓 冲流 通过//举例
// 修改标准输入流关联的位置
// 先修改关联的位置
System.setIn(new FileInputStream("day20/a/1.txt"));// 再获取标准输入流 InputStream in = System.in; int i = 0; while ((i = in.read()) != -1) {System.out.println((char)i);}System.setIn(InputStream in),可以更改标准输入流关联的设备
该流对象不需要关闭
修改关联设备注意事项:
1.先修改关联设备
2.再获取标准输入流//举例
// 增强标准输入流读取能力
// BufferedReader readLine
// BufferedReader只能增强字符流,不能直接增强System.in(标准输入流,字节流)
// InputStreamReader 字节流通向字符流的桥梁,它就可以把字节流包装为字符流
// 使用它的构造方法: InputStreamReader(InputStream is) InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.print("请录入一个字符串:"); String msg = br.readLine(); System.out.println(msg); br.close(); isr.close();
- 标准输出流
System.out:
该流的类型为PrintStream,属于字节流,是字节打印流。是OutputStream的孙子辈类
默认关联的设置是控制台,即可以将数据直接写到控制台显示
通过System.setOut(OutputStream out),可以更改标准输出流关联的设备
修改关联设备注意事项:
1.先修改关联设备
2.再获取标准输出流
//举例
// 修改标准输出流关联的位置
// 只能传入打印流PrintStream对象, 可以使用修改位置的方式,自己制作日志功能. System.setOut(new PrintStream("day20/a/10.txt")); System.out.println("你好"); System.out.println(new Date()+"程序出现了bug");
更改标准输出流关联的设备
修改关联设备注意事项:
1.先修改关联设备
2.再获取标准输出流
//举例
// 修改标准输出流关联的位置
// 只能传入打印流PrintStream对象, 可以使用修改位置的方式,自己制作日志功能. System.setOut(new PrintStream("day20/a/10.txt")); System.out.println("你好"); System.out.println(new Date()+"程序出现了bug");
字节流、字节流、转换流、打印流相关推荐
- 第十五章 IO流(转换流 字符流 字符缓冲流 打印流)
Java基础15 第十五章 IO流(转换流 字符流 字符缓冲流 打印流) 15.1 字符编码和字符集 15.1.1 字符编码 15.1.2 字符集 15.1.3 String类getBytes()方法 ...
- java学习--基础知识进阶第十天--标准输入流 转换流 打印流、对象操作流 、Properties集合...
今日内容介绍 u 标准输入流 & 转换流 & 打印流 u 对象操作流 u Properties集合 第1章 标准输入流 & 转换流 & 打印流 1.1 标准输入输 ...
- JAVA学习 API_day10(缓冲流, 打印流, 对象流)
缓冲流, 转换流, 打印流, 对象流 1. 缓冲流 1. 字节缓冲流 2. 字符缓冲流 2.打印流 1.字节打印流(了解) 2.字符打印流 3.对象流 1. 缓冲流 1. 字节缓冲流 包装 -> ...
- IO流的字符流+对象流+打印流+内存流+随机访问流(2)
IO流的字符流+对象流+打印流+内存流+随机访问流(2) 一.字符流 1.利用字符输出转换流 向文件写入数据 1.文件存在的情况 2.文件不存在的情况 经验:所有的输出流,当文件不存在时都会创建文件 ...
- 【小白学Java】D32》》》IO流 之 序列化流 打印流
[友情链接]➡➡▶IO流 之 File类 & 递归 [友情链接]➡➡▶IO流 之 过滤器 & 字节流 [友情链接]➡➡▶IO流 之字符流 & 属性集(Properties集合) ...
- Java学习-IO流-打印流
Java学习-IO流-打印流 IO流↙ ↘字节流 字符流↙ ↘ ↙ ↘ InputStream OutputStream Reader Writer↓ ↓PrintStream PrintWriter ...
- Java IO流 - 打印流详细使用介绍
文章目录 打印流 打印流基本使用 输出语句重定向 打印流 打印流基本使用 打印流: 作用:打印流可以实现更方便.更高效的打印数据到文件中去.打印流一般是指:PrintStream,PrintWrite ...
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...
- 【Java10】lambda表达式(函数式编程),Stream流,File类,字节/字符流,乱码,缓冲/转换/序列化/打印流,Properties
文章目录 1.lambda表达式标准语法:()->{} 2.lambda表达式简略语法:可推导即可省略 3.lambda表达式原理:lambda效率比匿名内部类高 4.两个函数式接口:Consu ...
最新文章
- mysql5.7版本中的命令_mysql (5.7版本)---的配置
- (chap1 网络基础知识)OSI参考模型举例
- 年假.........
- 脑电图伪差去除matlab,脑电图伪差的识别方法.ppt
- 从零开始,做一个NodeJS博客(四):服务器渲染页面与Pjax
- JVM优化系列-JVM G1 垃圾收集器
- faster-rcnn tensorflow windows python 训练自己数据
- python tkinter treeview 高亮_满满的成就感~如何用python让你的想法拥有可操作性?(一)...
- linux连接交换机软件,如何用超级终端连接交换机 - 全文
- TLC5615输出256点正弦波(振幅和频率可调)
- [生存志] 第54节 武经七书司马法
- 如何使用图灵机器人实现自动回复?
- 免费的网站,堪称神器
- 国内短信服务商厂商比较
- 220V交流电向单片机供电电路设计思路
- 做为程序员 给大家推荐不很错的淘宝店
- 用异或对身份证等图片加密的严谨方式
- DBDataSource platformDataSource has not registed!的问题
- iOS开发笔记 - 网络篇
- linux识别fastboot设备,fastboot 没有识别手机
热门文章
- 【亲测纯净版】10月最新晴天贷立刻贷小额借贷大数据借贷平台网站源码已对接免签支付
- 【Python笔记】pyqt5进度条-多线程图像分块处理防止窗体卡顿
- React组件进阶--组件通讯介绍,组件的 props特点,组件通讯的三种方式子到父,父到子,兄弟到兄弟组件,Context,回顾练习
- python定义一个student类、有下面的_Python的类和方法——成员可见性
- html5 高度 满屏,HTML5 全屏特性
- 太真实,北上广深年薪20W、30W、40W的程序员的生活状态!
- Luat模块应用手册-指南-Luat二次开发教程指南-功能开发教程-长连接超低功耗方案
- 用力一瞥Android渲染机制-黄油计划
- 租户管理门户登录报错,提示身份验证失败
- 微信小程序 - 修改 button 边框和背景色