JAVA IO总结
File类:IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容。该类定义了一些与平台无关的方法来
操纵文件,创建、删除等。其中java中的目录当成一种特殊的文件使用,list方法可以返回目录中所有的子目录和文件名。
RandomAccessFile类:该类提供了众多的文件访问方法,并且支持“随机访问”方式。该类构造器中有个文件指示器。该类在随机读写等长记录格式的文件时有很大优势,使用流的方式读取文件内容,必须按照顺序一个字节一个字节读取等长记录要求每条记录信息一样。但是该类仅限于操作文件,不能访问其他IO设备,如网络,内存映像等。
两种构造方法,new RandomAccessFile(f,"rw");//读写方式
???????????????????????? new RandomAccessFile(f,"r");//只读方式,读和写共享一个文件指示器。
各种节点流类:
流是字节序列的抽象概念,文件是数据的静态存储形式,而流是指数据传输时的形态。
流分成2类:
输入/输出都是站在程序运行所在的内存的角度来看
输入流:
输出流:
还有一种分类:
字节流: 字节流每次处理的数据单元是一个8位的字节。
字符流: 在UNICODE字符集里,一个字符占16位。?
??????????????? 字符流每次处理的数据源单元是一个字符。
输入流“取水”的三个方法
read() -> 返回实际所取的一滴“水”。
read(buff) -> 返回实际所取的水滴的数量。输出流“输出水”的三个方法
write(int) -> 将单独的一滴“水”输出到输出流
write(buff) -> 将buff中所有“水滴”输出到输出流。
write(buff , off , length) -> 将buff中从off开始,长度为length的“水滴”输出到输出流。所有IO流,使用完后都应该要关闭!
为什么要关闭呢?
因为创建io流对象时,操作系统会产生流资源,垃圾回收只会管理类实例对象,不会管理系统产生的流资源。io中的缓冲区:io读写文件的时候,往往都不是直接将数据从IO设备读或者直接写入IO设备中,写时一般是将其填入缓冲区,待缓冲区满后然后将数据写入IO设备,如果想将数据写入IO设备,可以使用flush方法,但是该方法只有那些支持缓冲区的类才有。使用缓冲区可以提高读写的效率。以Stream结尾的都是字节流,以Writer/Reader结尾的是字符流
+-----------------------+------------------------+---------------------+-----------------------+
|????? InputStream?????????? |???? OutputStream??????????? |??????? Reader???????????? |???????? Writer????????? ?| 抽象基类
+-----------------------+------------------------+---------------------+-----------------------+
|?? FileInputStream??????? ?|?? FileOutputStream?????? ? |????? FileReader???????? ?|?????? FileWriter??????? | 读写文件
+-----------------------+------------------------+---------------------+-----------------------+
| ByteArrayInputStream? | ByteArrayOutputStream? |?? CharArrayReader?? |??? CharArrayWriter?| 读写数组
+-----------------------+------------------------+---------------------+-----------------------+
|????????????????????????????????? ?|???????????????????????????????????? |???? StringReader????? ?|????? StringWriter???? | 读写字符串
+-----------------------+------------------------+---------------------+-----------------------+
|?? PipedInputStream?????? |??? PipedOutputStream?????|????? PipedReader????? ?|????? PipedWriter????? | 管道流
+-----------------------+------------------------+---------------------+-----------------------+
|? FilterInputStream???????? |? FilterOutputStream???????|???? FilterReader??????? ?|????? FilterWriter??????| 处理流的抽象基类
+-----------------------+------------------------+---------------------+-----------------------+
| BufferedInputStream??? ?| BufferedOutputStream?? |??? BufferedReader???? |???? BufferedWriter??| 增加缓冲功能
+-----------------------+------------------------+---------------------+-----------------------+
|???????????????????????????????? ?? |????? PrintStream??????????? ?|???????????????????????????????|?????? PrintWriter???? ?| 打印流
+-----------------------+------------------------+---------------------+-----------------------+
|?????????????????????? |??????????????????????? |? InputStreamReader? |?? OutputStreamWriter? | 转换流(将字节流转换为字符流)
+-----------------------+------------------------+---------------------+-----------------------+
流还有一种分类方法,按是否与物理节点关联来分类。
节点流:直接和一个物理节点关联的。节点流的坏处是用起来不太方便。
处理流(包装流):它是建立在已有的流的基础之上!用起来比较方便。
?