一、字符流
1、输入输出流
1、特点:
是数据传输的一套机制,往内存传输的数据的输入流,内存往外传输数据的是输出流
2、分类:
根据数据的传输方式可分为:
- 字符流
- 字节流
3、基本流:
四大IO流 | 字符流 | 字节流 |
---|---|---|
输入流 | 字符输入流(Reader) | 字节输入流(InputStream) |
输出流 | 字符输出流(Writer) | 字节输出流(OutputStream) |
4、存储获取数据
- 位置:
硬盘 、内存、网络、外设
2、FileWriter类
1、创建对象
FileWriter w=new FileWriter("E:\\1.txt");
2、路径
1、如果路径正确但没有具体的文件就会创建一个空文件
2、文件已经存在则会在创建一个空文件并覆盖之前的文件内容
3、保证在写数据之前有一个空文件
3、方法
-
flush()
功能:冲刷缓冲区,不管缓冲区数据有没有存满都要进行传输,防止数据滞留在缓冲区产生数据丢失
-
close()
功能:关闭数据连接通道,在关闭前,会自动进行冲刷缓冲区
-
writer()
功能:底层基于缓冲区进行进行数据传输的,默认缓冲区数据装满才能进行传输,可以通过flush()和close()进行缓冲区冲刷
4、对象回收
将对象赋予 null 值,置为无用对象,在某个时间进行垃圾回收
3、FileReader类
1、创建对象
FileReader r = new FileReader("E:\\1.txt");
2、方法
-
read()
功能:返回的是读取到字符的编码值,读取结束的标志就是返回-1
3、自建缓冲区
FileReader reader=new FileReader("D:\\a.txt");
//读取数据
//自建缓冲区---数组---字符流---字符数组
char[] cs=new char[3];
int len=-1;
//reader.read(字符数组)--返回值就是每次读取到的字符个数
while((len=reader.read(cs))!=-1){//读取到的内容存放到数组
System.out.println(new String(cs,0,len));
}
reader.close(); //关流
4、异常处理
1、在try块外进行声明对象,在try块里进行对象初始化
2、保证对象已经进行正常的初始化才能进行关流操作
3、不管关流成功还是失败都要对对象进行置为无用对象的操作,等待回收
4、流关闭失败有可能是在自动冲刷缓冲区之前,保证数据不能滞留在缓冲区中,自己进行手动冲 刷缓冲区
二、缓冲流
1、BufferedReader类
1、功能:
给字符输入流提供缓冲区 , readLine() 读取文件一行
真正读取内容的流对象是FileReader,字符输入流,而缓冲流对象只是给字符输入流提供一个缓冲区
BufferedReader br=new BufferedReader(new FileReader("D:\\3.txt"));
//读取一行---结束标志null
String str="";
while((str=br.readLine())!=null){
//
System.out.println(str);
}
2、BufferedWriter类
1、功能:
字符输出流,提供给字符输出流提供一个更大的缓冲区,newLine换行
BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\b.txt"));
//写出数据
bw.write("abc");
//换行---不管具体什么的操作系统
//不同操作系统的换行符不一样
//Windows---\r\n linux---\n
bw.newLine();
bw.write("123");
//关流--冲刷缓冲区
bw.close();
3、装饰者模式
-
模式:
遇到一类问题,提供统一的解决方法
-
设计者模式:
在软件开发中,遇到一类问题,提供统一的解决方法
-
装饰者模式:
通过同类对象给本类对象增强功能或者完善功能
三、字节流
1、字节输出流
1、创建
字节输出流是以字节的形式向文件写入数据
FileOutputStream os=new FileOutputStream("E:\\3.txt",true);
如果指定为true,则会在文件末尾添加
FileOutputStream os=new FileOutputStream("D:\\c.txt",true);
//写出数据
os.write("中".getBytes()); //获取字节数组
os.close(); //关流
2、字节输入流
1、创建
FileInputStream is=new FileInputStream("D:\\1.txt");
//读取数据 结束标志是-1
//自建缓冲区
byte[] bs=new byte[10];
int len=-1;
while((len=is.read(bs))!=-1){
System.out.println(new String(bs,0,len));
}
is.close(); //关流
四、转换流
1、OutputStreamWriter类
功能:
实现字符流转成字节流,底层真正做的数据传输是字节输出流
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\12.txt"));
//写出数据---字符串---字符
osw.write("abc");
osw.close(); //关流
2、InputStreamReader类
功能:
字节流转成字符流,底层从文件读取的是字节输入流,展示的时候使用字符输入流
InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\12.txt"));
//读取数据---字符数组--字符---字符流
char[] cs=new char[5];
int len=-1;
while((len=isr.read(cs))!=-1){
System.out.println(new String(cs,0,len));
}
五、系统流
定义:
都是字节流组成,且都是静态的,不能关流
- System.out
- System.err
- System.in