1. Java文件对象
Java中File类提供了四种构造方式。
这四种构造方式实现了Java可以在默认路径创建文件/文件夹、在给定路径下创建文件。
对于一个文件对象,可以访问它的名字、父路径、绝对路径、相对路径。
File也提供了创建一个文件、文件夹、临时文件的方法。
File提供了很多对文件的操作和查看方法,具体查阅API。
文件的读写要使用到流。
2.IO分类
JavaIO流的体系
2.1按照流向
a) 输入流
只能向其中读取数据不能写入数据。(磁盘->内存、网络->本地)(基类:InputSream和Reader)
b) 输出流
只能向其中写入数据不能读取数据。(内存->磁盘、服务器->网络)(基类:OutputSream和Writer)
2.2按照操作数据单位
字节流和字符流的操作几乎一致,区别在于操作单位。
a) 字节流
字节流的操作单位是8位的字节。主要由InputStream和OutputStream作为基类。
b) 字符流
字符流的操作单位是16位的字符。主要由Reader和Writer作为基类。
字符流和字节流的使用时机
处理音频文件、图片、歌曲,优先使用字节流;
处理是关系到中文(文本)的,使用字符流更佳;
可以使用字符流处理的也可以用字节流处理,能使用字节流处理的不一定能使用字符流处理。
区别:
1、字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的
2、字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容
3、Reader类的read()方法返回类型为int :作为整数读取的字符(占两个字节共16位),范围在 0到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1
inputStream的read()虽然也返回int,但由于此类是面向字节流的,一个字节占8个位,所以返回 0到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。因此对于不能用0-255来表示的值就得用字符流来读取!比如说汉字.
4、字节流与字符流主要的区别是他们的的处理方式
字节流:处理字节和字节数组或二进制对象;
字符流:处理字符、字符数组或字符串。
2.3按照角色
a) 节点流(介质流)
可以从/向一个特定的IO设备(磁盘、网络)读/写数据的流。
程序直接连接到数据源,和实际的输入输出节点连接。
b) 操作流(装饰流)
用于对已存在的流进行连接或封装,通过封装后的流来实现读写。
区分处理流和节点流
如若一个流的构造函数的参数是一个数据源说明是节点流,
如果一个流的构造函数参数是一个字节流说明是操作流程。
处理流的优点
对于开发人员来讲,处理流的操作更加简单。
处理流的执行效率更高。
3.流的概念模型
a) 输入流
b) 输出流