流(I/O input/output 读/写)
1. 主要指两个平台之间数据的流动,而JAVA将不同的输入/输出源抽象表述为“流”,流代表着从起源到接收的有效数据。
2. 流的分类主要为三种:文件流(重要)、对象流、网络流。
(1) 文件流
读取文件流 / 写入文件流
字节型文件输入流 字节型文件输出流
FileInputStream FileOutputStream (8位字节)
字符型文件输入流 字符型文件输出流
FileReader FileWriter (16位字符)
文件(File类)
File类表示文件和目录路径名的抽象表达形式,并不是真实的文件,而是内存中对文件的映射。构造器中需要传递一个有效路径的字符串(URL)
主要方法:
canRead——是否可读
canWriter——是否可写
isHidden——是否是一个隐藏文件
lastModified——文件最近一次修改时间
setLastModified——设置文件最近一次修改时间
lenth——文件内容长度
getParent获得上一层文件目录
getName——获得文件名
getAbsolutePath——获得文件绝对路径
delete——删除文件或是空的文件夹
注意:“d:”后加“//”表示盘符下的根目录,不加则表示当前工程下的目录
(2) 对象流:
对象流的主要作用是可将对象存入文件,实现对象持久化,在使用时注意安全化。
(3) 缓冲流:使用缓冲区比没有使用缓冲区的效率更好,因为每趟磁盘操作逗比内存操作花费更多时间。所以用缓冲流对一般流进行封装,这样可以暂时存出一堆数据,直到封装流“满”的时候在实际写入磁盘,这样可以减少对磁盘操作的次数,主要封装流为BufferedWriter、BufferedReader。
3. 递归算法
递归算法简而言之是一个终止条件严谨的循环调用自身的思想,在通过流对文件的复制,遍历,剪切等操作时,这种思想可以大大减少代码的数量。如图所示。
4. 我对流的理解
流就好比是一个从红色装水的桶向蓝色的桶里不断地盛水、倒水的过程,流就好比是一个竹筒,先从红色的桶里舀水(读取)再送到蓝色的桶边(传递),最后倒进蓝色的桶(刷新流管道,写入)。缓冲流就好比是一个灌满了竹筒的水风车从一边不断地舀水,所有的竹筒都装满水后再倒入另一边。