IO流
数据分为:字节流和字符流
流向分为:输入流和输出流
IO流常用基类:
字节流的抽象基类:InputStream
OutputStream
字符流的抽象基类:Reader 读
Writer 写
FileWriter io流是用于操作数据的,那么数据的最常见提现形式是“文件”
flush();刷新该流的缓冲
close(); 关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中,和flush区别,flush刷新后,流可以继续使用, close刷新后,会将流关闭。
IO流:文本文件读取方式一
创建一个文件读取流对象和指定名称的文件相关联。要保证文件是已经存在的,如果不存在,会发生io异常
FileReader x=new FileReader(“**.txt”);
read方法一次读一个字符,自动向下读,独到末尾,则返回-1(如果是流的缓冲区则返回的是null)
IO流:文本文件读取方式二
通过字符数组进行读取,定义一个字符数组,用于存储读到字符,该read(char[])返回的是读到字符个数
IO流(字符流缓冲区:BufferedWriter)
对应类:BuffereWriter
BuffereReader
缓冲去要结合流才可以使用(在创建缓冲区之前,必须要先有流对象)
为了提高字符写入流效率加入了缓冲区技术,只要将需要被提高效率的流对象最为参数传递给缓冲区的构造函数即可。
特别注意:只要用到缓冲区,就要刷新(关闭缓冲区,就是关闭缓冲区中的流对象)
跨平台的换行符: newLine();
IO流 BuffereReader
1.创建一个读取流对象和文件先关联:FileReader x=new FileReader(“**.txt”);
2.为了提高效率,加入缓冲技术,将字符读取流对象作为参数,传递给缓冲对象的构造函数:BuffereReader y=new BuffereReader(x);
该缓冲区提供了一次度一行的方法:readLine,当返回null时,表示读到了文件末尾。
IO流 readLine:无论是读一行,获取读取多个字符,其实最终都是在硬盘一个一个读取,所以最终使用的还是read方法读一个的方法。
IO流 装饰设计模式:
当想要对已有的对象进行功能增强时
可以定义类,将已有对象传入,基于已有的功能并提供加强功能
那么自定义的该类称为装饰类
IO流 装饰和继承的区别:
装饰比继承要灵活,避免了继承体系的臃肿。
而且降低了类与类之间的关系。
装饰类因为增强已有的对象,具备的功能和已有的相同的,只不过提供了更 强的功能。
所以装饰类和被装饰类通常是都属于一个体系中的。
IO流转换流:
将字节流对象转成字符流对象,使用转换流:InputStreamReader
为了提高效率,将字符串进行缓冲去技术高效操作:BufferedReader
注意:转换流的使用,字符与字节之间的桥梁,通常涉及到字符编码转换时, 需要用到转换流
IO流-File类:用来将文件或者文件夹封装成对象,方便对文件与文件夹进行属 性信息的操作
File类常见方法:
创建:createNewFile();
特点:在指定位置创建文件,如果该文件已经存在,则不创建。返回false 和输出流不一样。输出流对象建立创建文件,而且文件已经存在, 会覆盖。
删除:delete()(删除失败返回假)
判断: booleam exists()文件是否存在
创建文件夹 booleam mkdir()创建文件夹
booleam mkdirs() 创建多级文件夹
注意:在判断文件对象是否文件或者目的时,必须要先判断文件对象封装的内 容是否存在
IO流 获取:
getname()名字
getPath()路径
getParent()绝对路径中的父目录
getAbsolutePath()绝对路径
lastModified()返回最后一次修改时间
length()文件长度
IO流 递归方法:自己调用自己的方法。
注意:要限定条件
要注意递归的次数,尽量避免内存溢出。
IO流-Properties
Properties是hashtable子类
也就是它具备map集合的特点,而且他里面存储的键值对都是字符串
是集合中和IO技术想结合的集合容器
该对象的特点:可以用于键值对形式的配置文件。
IO流 打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印
PrintStream:构造函数可以接收的参数类型
IO流 合并流:SequenceInputStream(1,2)将两个流合并
IO流 对象的序列化:ObjectOutStream
IO流 管道流:
PipedInputStream 和 PipedOutputStream
输入和输出可以直接进行连接
IO流 RandomAccessFile
该类不算是IO体系中的子类,而是直接继承自Object
但是它是IO包中的成员,因为它具备读和写的功能
内部封装了一个数组,而且通过指针对数组的元素进行操作
可以通过getFilePointer获取指针位置
同时可以富哦痛seek改变指针的位置
其实完成读写的原理就是内部封装了字节输入流和输出流
该类只能操作文件。
IO流-ByteArrayStream
ByteArrayInputStream:在构造的时候,需要接收数据源,而且数据是一 个字节数组
ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对 象中已经内部封装了可变长度的字节数组,这 就是数据目的地。
因为这两个流对象都操作的数组,并没有使用系统资源,所以不用close关闭
操作字符数组: charArrayReader
charArrayWrite
操作字符串:StringReader
StringWriter
IO流-转换流的字符编码:
编码:字符串变成字节数组
解码:字节数组变成字符串 |
|