IO流输入与输出:
按流向分为:输入流、输出流
按操作数据分为:字节流、字符流
字节流的抽象基类:
InputStream、OutputStream、BufferedInputStream、BufferedOutputStream
——FileInputStream
字符流的抽象基类:
Reader、 Writer、BufferedReader、BufferedWriter
——FileReader
打印流:
字节打印流:printStream
构造函数可接收的参数类型:
file对象、字符串路径String、字节输出流OutputStream
字符打印流:printWriter
构造函数可接收的参数类型:
File对象、字符串路径String、
字节输出流OutputStream、字符输出流Writer
序列流:SequenceInputStream
对已有文件进行续写:
FileWriter fw=new FileWriter("test.txt",true);传递一个true参数,代表不覆盖已有的文件内容,将它加到已有文件的末尾。
字符流的缓冲区:
对应类:BufferedWriter、BufferedReader 需结合流才能使用。
它的出现是为了提高流的操作效率,所以在创建缓冲区前必须要先有流对象。
只要用到缓冲区就要记得刷新。bufferWriter.flush();
该缓冲区提供了一个跨平台的换行方法bufferWriter.newLine();
该缓冲区提供了一个读取一行的方法bufferReader.readLine();
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已在对象传入,基于原来的功能,提供增强功能。则自定义的类就称为装饰类。
装饰类通常会通过构造方法接收被装饰类的对象,并基于被装饰的对象的功能提供更强的功能。
Person 类,
SuperPerson 类中写:
private Person p;
SuperPerson(Person p){this.p=p;}
MyReader专门用于读取数据的类。
——MyTextReader
——MyBufferReader(MyReader r){}
——MyMediaReader
——MyBufferReader(MyReader r){}
——MyDataReader
——MyBufferReader(MyReader r){}
——MyBufferReader
——MyBufferReader(MyReader r){}
Class MyBufferReader extends MyReader{
private MyReader r;
MyBufferReader(MyReader r){}
}
装饰模式比继承灵活,降低了类与类之间的关系,装饰类和被装饰类都所属于一个体系。
流操作的基本规律:
1、明确源和目的
源:输入流——InputStream、Reader
目的:输出流——OutputStream、Writer
2、操作的数据是否是纯文本
是:字符流
不是:字节流
转换流是字符和字节之间的桥梁,涉及到字符编码转换时需用到,InputStreamReader
File:
1、创建:
Boolean createNewFile():在指定位置创建文件,如果文件已存在则不创建,返回false.
Boolean mkdir();创建文件夹
Boolean mkdirs();创建多级目录的文件夹
2、删除:boolean delete();删除失败返回false;
Void deleteOnExit();在程序退出时删除指定文件
3、判断:canExecute()测试文件是否可执行
在判断文件对象是否是文件或是目录时必须要先判断该文件对象封装的内容是否存在,通过exists判断
isFile();是否是文件
isDirectory();是否是目录
isHidden();是否是隐藏文件
4、获取信息:
getName();getpath();getParent();getAbsolutePath();
getCanonicalPath();获得规范路径
lastMotified();最后修改的时间
递归:
递归应注意的条件:
1、限定条件
2、要注意递归的次数,避免内存溢出
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |