java-io流
什么是流
程序运行在内存中,文件存储在硬盘中。流概念:内存与存储设备之间传输数据的通道。
流向划分,分为:
输入流:将存储设备中的内容读入到内存
输出流:将内存中的内容写入到存储设备中
单位划分,分为:
字节流:可以读写所有的数据,因为所有的数据在硬盘中都是以字节为单位进行存储的
字符流:只能读写文本数据
功能划分,分为:
节点流:底层流,具有实际传输数据的读写功能 InputStream > FileInputStream
过滤流(缓冲流):在节点流的基础之上增强的功能 InputStream > FilterInputStream > BufferedInputStream(默认读取8k)
字节流是不带缓存的,效率没有缓冲流高。
缓冲流BufferedOutputStream.write()默认写到缓冲区内(不会像字节流一样直接写入到硬盘),flush()会将内容写入到文件中,close()方法内部默认调用了flush()。
例子:用水杯接水需要来回接很多次,但使用容器大的水壶接水,可以减少接水的次数,提高效率。
对象流
ObjectInputStream / ObjectOutputStream
-
增强了缓冲区功能
-
增强了读写8中基本类型和字符串功能
-
增强了读写对象的功能 readObject() / writeObject()
使用流 传输对象的过程 称为 序列化(output)/反序列化 (input)
序列化的对象必须实现Serializable接口,该接口本身没有任何代码,仅仅是一个标记接口,标记该类可以序列化
SerialVersionUID序列化版本id,作用是确保序列化的类和反序列化的类是同一个类
静态变量 和 transient修饰属性,则该属性不能被序列化
字符流首先要注意编码格式,编码与解码方式不一致,就会出现乱码
字符流的父类(抽象类)Reader / Writer
文件字符流:FileReader和FileWriter只能读写字符文本文件,不能读写二进制文件(例如图片等)
字符缓冲流:BufferedReader / BufferedWriter
高效读写;支持输入换行符newLine();可一次写一行,读一行readLine()
打印流:PrintWriter
转换流:InputStreamReader / OutputStreamWriter
将字节流转换为字符流;可设置字符的编码方式
File类
字节流/字符流只是内存和硬盘之间输入输出的过程,而File代表硬盘中的一个文件或文件夹,可以进行创建、删除、获取目录中的内容等操作。
-
createNewFile() 创建文件
-
mkdir() 创建目录
-
delete() 删除文件或空目录 ; deleteOnExit() jvm删除
-
exists() 判断文件是否存在
-
getAbsolutePath() 获取文件的绝对路径
-
getName() 获取文件名称
-
getParent() 获取文件/目录所在的目录
-
isDirectory() 是否为目录
-
isFile() 是否为文件
-
length() 获取文件度
-
listFiles() 列出目录中的所有内容
-
renameTo() 修改文件名称
-
lastModified() 获取文件的创建时间
-
canWrite() 是否可写(windows系统支持该方法,linux系统也有对应的方法)
-
list() 文件夹下的内容集合
路径分隔符(路径和路径之间的分割):File.pathSeparator ( ; )
名称分隔符(目录和目录之间的分隔):File.separator ( \ )
*练习:递归删除文件夹
FileFilter接口
当调用File类的listFiles()时,支持传入FileFilter接口实现类,对获取的文件进行过滤
Properties 属性集合,集成HashTable(线程安全)
-
存储 key value
-
key value 都是固定的字符串类型,所有没有泛型
-
和流有关:list() 将集合数据打印到指定文件中 ;

浙公网安备 33010602011771号