本文讲述如下流:FileWriter、FileReader、BufferWriter、BufferReader、LineNumReader、FileOutputStream、FileInputStream、BufferInputStream、BufferOutputStream
——————————————————————————————————————————————————————
1、明确“源”和“目的”:
字节流 字符流
源(输入流):InputStream()、 Reader();
目的(输出):OutputStream()、Reader();
2、明确数据是否“纯文本”:
是:字符流;
否:字节流。
3、明确具体使用对象:
源设备:内存、硬盘、键盘;
目的 : 内存、硬盘、控制台。
——————————————————————————————————————————————————————
1、写文件FileWriter
1)flush()和close()的区别:
flush()刷新流后,将数据写入文件中,流还可以使用;
close()关闭流之前,会自动调用flush()刷新流。关闭后,流不能再次使用。
2)FileWriter()、write()、close()都会产生抛出;
3)我们将close()放在finally里面进行处理;
4)那么,需要将fWriter变量定义在外面,同时需要再重新try一次close();
5)注意,假设创建文件失败,则fWriter=null; 此时进入finally调用close(),异常。所以需要判null。
6)注意,换行需要用“\r\n”实现。
2、读文件FileReader
read()函数,每次读取一个字符,返回值为int。
int read(char [])每次读取一块数据直到将文件读完。这里注意一下,int read(char [])返回值为成功读取到的数据
1)缓冲区的出现,是为了提高流的操作效率;
2)所以,创建缓冲区之前,必须有流;
3)缓冲区提供了一个跨平台是方法:newLine() 就是换行,避免手写的“\r\n”在不同操作系统下的弊端。
4、文件缓冲区之读文件操作BufferedReader每次读取一行数据,不读取换行符。
此类定义了方法getLineNumber(int)和getLineNumber()用于设置行号和获取行号;
6、字节流操作之写文件FileOutputStream
当我们需要对图片视频等数据进行操作的时候,就需要用到字节流;
1)创建两个流(输入流,输出流);
2)与缓冲区建立关联;(加入缓冲区速度提高很多,当然不加也能实现,只是慢而已)。
3)开始拷贝。下面展示一个mp3拷贝例子: