Java IO 流总结
文件
File对象既可以表示文件,也可以表示目录。
调用
isFile(),判断该File对象是否是一个已存在的文件,调用isDirectory(),判断该File对象是否是一个已存在的目录
常用的文件操作
-
创建文件对象相关的构造器和方法
new File(String pathname) //根据路径构建一个File对象 new File(File parent, String child) //根据父目录文件+子路径构建 new File(String parent, String child) //根据父目录+子路径构建 -
createNewFile 创建新文件
-
getName 获取文件名称
-
getAbsolutePath 获取绝对路径
-
getPath 获取相对路径
-
getParent 获取父目录
-
length 获取文件大小
-
exists 获取文件是否存在
-
isFile 获取是否是文件
-
isDirectory 获取是否是目录
-
目录的操作已经文件删除
mkdir 创建一级目录
mkdirs 创建多级目录
delete 删除空目录或者文件
RandomAccessFile
构造方法:
RandomAccessFile raf = newRandomAccessFile(File file, String mode);
其中参数 mode 的值可选 "r":可读,"w" :可写,"rw":可读性;
成员方法:
seek(int index);可以将指针移动到某个位置开始读写;
setLength(long len);给写入文件预留空间:
RandomAccessFile 特点和优势
-
既可以读又可以写。
RandomAccessFile不属于InputStream和OutputStream类系的它是一个完全独立的类,所有方 法(绝大多数都只属于它自己)都是自己从头开始规定的,这里面包含读写两种操作
-
可以指定位置写。
RandomAccessFile能在文件里面前后移动,在文件里移动用的seek( ),所以它的行为与其它的I/O类 有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。只有RandomAccessFile才有 seek搜寻方法,而这个方法也只适用于文件
IO
IO流原理
IO是指Input/Output,即输入和输出。以内存为中心:
- Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。
- Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。
为什么要把数据读到内存才能处理这些数据?因为代码是在内存中运行的,数据也必须读到内存,最终的表示方式无非是byte数组,字符串等,都必须存放在内存里。
从Java代码来看,输入实际上就是从外部,例如,硬盘上的某个文件,把内容读到内存,并且以Java提供的某种数据类型表示,例如,byte[],String,这样,后续代码才能处理这些数据。
因为内存有“易失性”的特点,所以必须把处理后的数据以某种方式输出,例如,写入到文件。Output实际上就是把Java表示的数据格式,例如,byte[],String等输出到某个地方。
IO流是一种顺序读写数据的模式,它的特点是单向流动。数据类似自来水一样在水管中流动,所以我们把它称为IO流。
IO流分类
- 按操作数据单位的不同分为:字节流(8 bit)、字符流(按字符)。
- 按数据的流向不同分为:输入流、输出流。
- 按流的角色的不同分为:节点流、包装流。
| 抽象基类 | 字节流 | 字符流 |
|---|---|---|
| 输入流 | InputStream | Reader |
| 输出流 | OutputStream | Writer |
- Java IO 流共有几十个,都是从这四个抽象基类派生的。
- 由这四个类派生的的子类的名称都是以其父类作为子类后缀名。
装饰器模式
Component:抽象构建接口
ConcreteComponent:具体的构建对象,实现组 件对象接口,通常就是被装饰的原始对象。就 对这个对象添加功能。
Decorator:所有装饰器的抽象父类,需要定义 一个与组件接口一致的接口,内部持有一个 Component对象,就是持有一个被装饰的对象。
ConreteDecoratorA/ConreteDecoratorB:实际 的装饰器对象,实现具体添加功能。
类比IO流中的装饰器模式