I/O流笔记
1.字节流两个基类
InputStream OutputStream
字符流两个基类
Reader Writer
2.字符流的使用:
创建一个FileWriter对象,对该对象一被初始化就必须要明确被操作的文件
而且该文件会被创建到制定目录下,如果该目录下已有同名文件,将被覆盖
调用write方法,将字符串写入到流中
刷新流对象中缓冲中的数据,将数据流刷到目的地中
flush和close的区别:
flush刷新之后,流可以继续使用,close刷新之后,流将会关闭
3.缓冲的出现是为了提高流的操作效率而出现的,所以咋创建缓冲去之前,必须要先有流对象
关闭缓冲去就是在关闭缓冲区中的流对象。所以在关闭完缓冲区之后,就没有必要在关闭流对象了
缓冲区多了一个新的方法,就是newline(),跨平台。
BufferedReader类中:
readLine()方法,只返回一行的内容,但是不包括换行符;所以当使用BufferedReader类中的方法进行写操作时,不要忘了在写玩每行之后记得加上newLine()方法
装饰类:
装饰类通常会通过构造方法接受被装饰的对象,并且基于被装饰的对象的功能,提供更强的功能
装饰类和继承相比较:
装饰类因为已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,所以装饰类和被修饰类通常是都属于一个体系中的
4.字节流的使用:
基本上与字符流相同;
不同的地方有:
OutputStream()操作完之后直接就会到了目的地,并且不用刷新,之所以字符流需要刷新,是因为它需要一边先缓冲,一边查表,所以还需要flush()
InputStream()需要注意的一点就是:在自定义输入字节流(即InputStream)缓冲区的时候,为了解决当数据本身也出现-1的情况(这样的话会和我们函数的判断标志冲突),所以解决办法是:在提升数据类型的同时增大其数据值(方法是:与255相与)
5.转换流的作用:
最重要的作用就是可以制定编码
java中默认的编码是JBK
6.file类中常见的方法
创建
booleancreatNewFile():在指定位置创建文件,如果该文件已经存在,则不会创建,返回false。【和输出流不太一样,输出流对象一建立创建文件,而且文件已经存在,会覆盖】
boolean mkdir():创建文件夹
boolean mkdirs():创建多级文件夹
删除
boolean delete():删除失败会返回false
void deleteOnExit():在程序退出时删除制定文件
判断:
boolean exists():判断文件是否存在
isFile()
isDirector()
isHidden():
isAbsolute():
获取:
getName()
getPath()
getParent():该方法返回的是绝对路径中的父目录,如果获取的是相对路径,返回null
getAbsolutePath()
lastModified()
length()
7.递归
定义:也就是函数自身调用自身
注意:
限定条件
注意递归的次数。尽量避免内存溢出
8.PrintWriter
构造函数可以接收的参数类型
file对象:File
字符串路径:String
字节输出流:OutputStream
字符输出流:Writer