java之IO流总结
来源:互联网 发布:java lambda filter 编辑:程序博客网 时间:2024/05/01 01:57
第一部分:IO体系
1、IO流:
(1)描述:
用于处理设备之间的数据传输的体系,Java对数据的传输操作都是通过流的方式进行的,用于操作流的对象都在IO包中
(2)划分:
按流向分:输入流、输出流
按操作数据分:字节流和字符流(用编码表将字节处理成字符)
2、IO的四大基类:
3、常用基本IO类:Reader 字符读取流 Writer 字符写入流
InputStream 字节读取流 OutputStream 字节写入流
(1)Reader:
BufferedReader 字符读取缓冲流
InputStreamReader: 字符读取转换流
FileReader 文本文件读取流
(2)Writer:
BufferedWriter 字符写入缓冲流
OutputStreamWriter :字符写入转换流
FileWriter 文本文件写入流
(3)InputStream:
FileInputStream 文件读取流
(4)OutputStream:
FileOutputStream 文件写入流
第二部分:字符流
1、Reader
(1)共性方法:
close() 关闭流资源
read() 读取一个字符
read(char[] cbuf) 将读取的字符存放在指定字符数组中
read(char[] cbuf, int off, int len) 将读取的字符存放在指定字符数组的指定位置中
(2)InputStreamReader
描述:InputStream转换流,将字节流转换成字符流
通常在涉及到字符编码转换时用到转换流
FileReader
是InputStreamReader的子类,是封装了默认编码表的转换流
构造函数必须传入文件源,如果没有该资源,则报异常
(3)BufferReader
描述:字符读取缓冲流,要明确需要缓冲的读取流对象可以提高读取流的读取效率,并增加了更丰富的操作方法
方法:
readLine() 读一行字符,返回的数据不包含换行符
close() 关闭流资源,这里要关闭的是其对应的读取流的底层资源,其本身并不涉及底层资源调用
练习:模拟读一行数据的方法
LineNumberReader
带行号的字符缓冲区
方法:
getLineNumber 获取行标号
setLineNumber 设置行标号
readLine 读一行
扩展:键盘录入的读取录入信息原理和字符缓冲流读一行的原理一样,可以用转换流使键盘录入可以使用字符缓冲流的读一行方法
2、Writer
(1)共性方法:
close() 关闭此流资源,关闭前将流中的数据刷新到目的地中
flush() 将流的缓冲区中的数据刷到目的地中,刷新后还可以继续写入数据
write(char[] cbuf) 将字符数组中的数据写入到流中
write(char[] cbuf, int off, int len) 将字符数组中指定位置的数据写入到流中
write(int c) 将一个字符写入到流中
write(String str) 将字符串写入到流中
write(String str, int off, int len) 将字符串中指定位置的子串写入到流中
(2)OutputStreamWriter
描述:输出转换流,将字符流转换成字节流
可以指定写入数据的编码表,只有转换流可以使用指定编码表
FileWriter
OutputStreamWriter的子类,其实是相当于封装好了默认的编码表的转换流
构造
构造函数必须定义文件源,如果无法创建,则报异常
如果指定的位置没有该文件,则新建,如果有,则覆盖原有数据
FileWriter(String fileName) 构造函数接收一个要将流中数据写入文件的对应文件名
FileWriter(String fileName,boolean append) append值为true时,将数据写在已有文件末尾处
(3)BufferedWriter
描述:
构造函数传入一个流对象(为了给流对象提高效率,所以必须要先有流对象)
缓冲区的资源来自于流对象,所以关闭缓冲区就是在关闭流对象的资源
只要用到缓冲区就要记得刷新
方法:
close 关闭流资源
flush 将流中的数据刷新到指定目的地
newLine 写入一个换行符到流中
第三部分:字节流
1、InputStream
共性方法:
close() 关闭流资源
read() 读一个字节
read(byte[] b) 将字节读取到字节数组中
read(byte[] b, int off, int len) 将字节读取到字节数组的指定位置
FileInputStream
2、OutputStream
方法:
close() 关闭资源
flush() 强制刷新
write(byte[] b) 写字节数组
write(byte[] b, int off, int len)
write(int b) 写一个字节
FileOutputStream
文件输出流
PrintStream
打印流
可用于:打印异常信息、打印系统属性信息
PrintStackTrace(···)
properties对象.List(newPrintStream(流))
不可以用字符流来操作非文本文件
第四部分:IO的操作思路及IO异常
1、操作IO流的思路
(1)明确源和目的;
1)源:
应用体系:
InputStreamReader
源设备:
键盘 、硬盘(文件)、内存
2)目的:
应用体系:
OutputStreamWriter
目的设备:
控制台、硬盘(文件)、内存
(2)明确操作的数据类型;
纯文本数据:
应用体系:
ReaderWriter
非纯文本数据:
应用体系:
InputStreamOutputStream
2、IO异常处理
处理流程
1、如果创建流不成功,即没有获取到资源,后面的都不用再执行了,所以一起将创建流到对流的操作部分一起写入到一个try语句中
2、不管操作资源发生什么异常,到最后流的资源一定要回收,所以close方法一定要执行,所以close方法写在finally里面,并且要单独定义一个try语句处理close方法可能发生的异常
3、流有可能创建不成功,所以关闭流之前要判断流对象是否为空,如果为空则不用关
log4j:
是处理异常信息的网络资源包
- java之IO流总结
- java之IO流总结
- Java之IO流总结
- JAVA IO之管道流总结大全
- JAVA IO之管道流总结大全
- JAVA IO之管道流总结
- JAVA IO之管道流总结大全
- java学习之IO流总结
- Java基础之IO流学习总结
- 全面复习之 java IO流总结
- Java之IO流学习总结【上】
- java之IO流学习总结【下】
- Java IO流之规律总结
- Java之IO流学习总结-上
- Java之IO流学习总结-下
- java之IO流总结及图解
- Java基础学习之io流总结
- java编程之io流学习总结
- 第12周项目1 - 教师兼干部类
- MySQL导入.sql文件及常用命令
- json构造和解析
- 程序填空
- ACM-Sort it
- java之IO流总结
- 如何处理海量数据(转)
- 使用报告实现分子式显示
- 利用反射让Model与Xml互转的通用方法
- android横竖屏切换的生命周期解析
- opencv
- MATLAB图片缩小代码
- 12周:项目1-教师兼干部类
- 用友ERP T6 技术解析(一)