流的操作规律
IO流中对象很多,解决问题(处理设备上的数据时)到底该用哪个对象呢?
把IO流进行了规律的总结(四个明确):
l 明确一:要操作的数据是数据源还是数据目的。
源:InputStream Reader
目的:OutputStream Writer
先根据需求明确要读,还是要写。
l 明确二:要操作的数据是字节还是文本呢?
源:
字节:InputStream
文本:Reader
目的:
字节:OutputStream
文本:Writer
已经明确到了具体的体系上。
l 明确三:明确数据所在的具体设备。
源设备:
硬盘:文件 File开头。
内存:数组,字符串。
键盘:System.in;
网络:Socket
目的设备:
硬盘:文件 File开头。
内存:数组,字符串。
屏幕:System.out
网络:Socket
完全可以明确具体要使用哪个流对象。
l 明确四:是否需要额外功能呢?
额外功能:
转换吗?转换流。InputStreamReader OutputStreamWriter
高效吗?缓冲区对象。BufferedXXX
InputStream
FileInputStream
BufferedInputStream
OuputStream
FileOutputStream
BufferedOuputStream
Writer
OutputStreamWriter
FileWriter
BufferedWriter
Reader
InputStreamReader
FileReader
BufferedReader
总结
知识点总结
l 字节流
l 字节输入流 InputStream
l FileInputStream 操作文件的字节输入流
l BufferedInputStream高效的字节输入流
l 字节输出流 OutputStream
l FileOutputStream 操作文件的字节输出流
l BufferedOutputStream 高效的字节输出流
l 字符流
l 字符输入流 Reader
l FileReader 操作文件的字符输入流
l BufferedReader 高效的字符输入流
l InputStreamReader 输入操作的转换流(把字节流封装成字符流)
l 字符输出流 Writer
l FileWriter 操作文件的字符输出流
l BufferedWriter 高效的字符输出流
l OutputStreamWriter 输出操作的转换流(把字节流封装成字符流)
l 方法:
l 读数据方法:
l read() 一次读一个字节或字符的方法
l read(byte[] char[]) 一次读一个数组数据的方法
l readLine() 一次读一行字符串的方法(BufferedReader类特有方法)
l readObject() 从流中读取对象(ObjectInputStream特有方法)
l 写数据方法:
l write(int) 一次写一个字节或字符到文件中
l write(byte[] char[]) 一次写一个数组数据到文件中
l write(String) 一次写一个字符串内容到文件中
l writeObject(Object ) 写对象到流中(ObjectOutputStream类特有方法)
l newLine() 写一个换行符号(BufferedWriter类特有方法)
l 向文件中写入数据的过程
1,创建输出流对象
2,写数据到文件
3,关闭输出流
l 从文件中读数据的过程
1, 创建输入流对象
2, 从文件中读数据
3, 关闭输入流
l 文件复制的过程
1, 创建输入流(数据源)
2, 创建输出流(目的地)
3, 从输入流中读数据
4, 通过输出流,把数据写入目的地
5, 关闭流
OutputStreamWriter例子
public class OutputStreamWriterDemo {
public static void main(String[] args)throws IOException {
// writeGBK();
writeUTF();
}
/*
* 转换流对象OutputStreamWriter写文本
* 采用UTF-8编码表写入
*/
public static void writeUTF()throws IOException{
//创建字节输出流,绑定文件
FileOutputStream fos = new FileOutputStream("c:\\utf.txt");
//创建转换流对象,构造方法保证字节输出流,并指定编码表是UTF-8
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
osw.write("你好");
osw.close();
}
/*
* 转换流对象 OutputStreamWriter写文本
* 文本采用GBK的形式写入
*/
public static void writeGBK()throws IOException{
//创建字节输出流,绑定数据文件
FileOutputStream fos = new FileOutputStream("c:\\gbk.txt");
//创建转换流对象,构造方法,绑定字节输出流,使用GBK编码表
OutputStreamWriter osw = new OutputStreamWriter(fos);
//转换流写数据
osw.write("你好");
osw.close();
}
}