一.拷贝指定目录里的文件到指定目录
实例如下(实质是利用了文件名称过滤器):
二.文件的字符输出流
字节输出流和字符输出流的区别:
* 字符输出流可以直接向外写一个字符串.而字节输出流不行
* 字节流需要创建的是byte[]数组,而字符流需要创建的是char[]数组或者直接输出字符串
* ------------------------------------------------
* flush(刷新)操作,输出流中都有flush方法
* 计算机访问外部设备(磁盘文件),要比直接访问内存慢的多,如果每次write都要直接写出到
* 磁盘文件中,CPU都会花更多的时间,此时我们可以存储一个内存缓冲区,程序每次write方法
* 都是直接写到内存缓冲区中,当内存缓冲区满后,系统才把缓冲区内容一次性写出给磁盘文件
*
* ------------------------------------------------
* 使用缓冲区的好处:
* 1.提高CPU使用率
* 2.有机会回滚写入的数据
* ------------------------------------------------
* 对于字节流,flush方法不是都有作用(部分字节流才有作用), 对于字符流都有作用
* 系统在调用close()方法关闭资源之前,都会调用flush()方法
*
* ------------------------------------------------
* 操作系统使用-1表示磁盘文件的结尾标记
* 缓冲区大小一般使用容量整数倍,可以提高IO性能
实例如下:
三.文件的字符输入流
* 为什么要使用字符输入流而不是一直使用字节输入流?
* 因为字节流操作汉字或特殊的符号语言的时候容易乱码,建议使用字符流
* 先有字节流,才有字符流
* 在字符流中一个文字,一个符号,一个字母均代表一个字符
* 在字节流中一个汉字最少代表两个字节
*
*
* 使用记事本打开某个文件,可以看到内容的就是文本文件,否则是二进制文件
* 一般的,操作二进制文件(图片,音频,视频等)必须使用字节流
* 一般的,操作文本文件,使用字符流,使用字节流也可以,但是容易出现问题
* 如果不清楚文件是那一类型的,使用字节流
四.文件字符流的拷贝操作
五.字符解码和编码操作
字符的编码和解码操作:
* 编码: 把字符串转换为byte数组;
* 解码: 把byte数组转换为字符串
*
* 一定要保证编码和解码的字符集相同,否则会出现乱码
实例如图:
六.包装流和缓冲流的引入和定义
* 1.处理流/包装流(相对于节点流更高级)
* 2.使用处理流包装了节点流,程序直接操作处理流.让节点流与底层的设备做IO操作
* 3.只需关闭处理流即可
*
* 包装流如何区分? 写代码的时候发现创建对象的时候,需要传递另一个流对象
* new 包装流(流对象)
*
*
* 什么是缓冲流?
* 是一个包装流/处理流,目的是其缓冲作用
* BufferedInputStream;
* BufferedOutputStream;
* BufferedReader;
* BufferedWriter;
*
*
* 缓冲流的目的:
* 操作流的时候,习惯定义一个byte/char数组
* int read():每次从磁盘中读取一个字节.直接操作磁盘文件性能极低
*
* 解决方案:定义一个数组作为缓冲区
* byte[] buffer=new byte[1024];该数组其实就是一个缓冲区
* 一次性从磁盘文件中读取1024个字节,如此一来,操作文件磁盘的次数就少了,性能得以提升
* 在使用缓冲流的时候一般有两个数组,一个大缓冲区(内存),一个小缓冲区,读取操作,先把文件读到
* 大缓冲区中,再把文件读到小缓冲区中, 大缓冲区一般使用默认缓冲区(内存)
*
* 既然我们都能想到,sun公司早都想到了,提供的默认缓冲区大小是8192(1024*8),我们一般
* 不用修改大小
缓冲流的示意图:
七.字节缓冲流
实例如图:
八.字符缓冲流
实例如图:
九.节点流和缓冲流的性能对比
实例如图:
十.转换流
转换流:把字节流转换为字符流
* InputStreamReader:把字节输入流转换为字符输入流* OutputStreamWriter:把字节输出流转换为字符输出流
*
* 为什么有字节流转换为字符流而没有字符流转换为字节流?
* 字节流可以操作一切文件(纯文本文件/二进制文件),但是用字节流操作纯文本文件容易出现乱码
* 字符流是用来操作 纯文本文件使用的, 使用的本身是对字节流的加强
*
* 构造方法:
* public InputStreamReader(InputStream in,Charset cs)创建使用给定字符集的 InputStreamReader。
* public OutputStreamWriter(OutputStream out,Charset cs)创建使用给定字符集的 OutputStreamWriter。
实例如图:
十一.合并流
SequenceInputStream的两个构造方法:
1).public SequenceInputStream(InputStream s1,InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2)
实例如图:
2). public SequenceInputStream(Enumeration e)