一、流的分类
字节流
OutputStream抽象类 子类:FileOutPutStream
InputStream抽象类 子类:FileInputStream
输出流
FileOutPutStream fos=new FileOutPutStream(D:\\abc.txt)
1.创建流对象 2.开启内存到文件的通道 3.没有文件,创建这个文件
字节流读写都是字节!
fos.write(97) // 在文本中写入97字节,经过微软文本编辑器解码后显示出来是字母a
windows的文本编辑器很强大,可以根据文本来选择编码集
流必须手动释放:fos.close() 垃圾回收器不会自动回收
续写操作:在构造方法后面
FileOutPutStream fos=new FileOutPutStream(D:\\abc.txt,true)
标准捕获写法
输入流
必须保证输入的文件存在,不存在会抛出异常
FileInPutStream fis=new FileInPutStream(D:\\abc.txt)
int read() 返回值是字节,末尾就返回-1
读取全部字节:
int by;
while((by=fis.read())!=-1){
System.out.println(by);
}
int read(byte[] b) 返回值是读取到的字节个数,将读取到的字节依次存入变量b中
字节流不能读中文!
缓冲流
在文件和内存之间开辟一个缓冲区,提高传输效率
构造方法要传入一个字节流
FileInPutStream fis=new FileInPutStream(D:\\abc.txt)
BufferedInputSream bis=new BufferedInputSream(fis);
之后操作就操作缓冲流就行了,关闭也关闭缓冲流
缓冲区默认大小:8192字节
将缓冲区的数据刷新到文件中:flush()
close()也能刷新一次,但是刷新后就关闭流了
字符流
字符流=字节流+编码集 使用缓冲区来解码
reader类,抽象父类,构造函数要传入一个字节流
InputStreamReader isr=new InputStreamReader(new FileInPutStream(D:\\abc.txt))
输入字符流和输出字符流的编码集可以不一样!
输入字符流的编码集要和读取文本的编码集一样,不然读取就是乱码
输出字符流的编码集要和打开这个文本的编辑器编码集一样
windows的文本编辑器强大,会根据文本的编码集来解码,因此可以打开任意编码集的文本
FileReader类
文本便捷类
支持整行读取:readerLine();
字符缓冲流
newLine()换行
字节流:掌握一次读写数组
字符流:掌握一次读写数组、一次读写一行