java-io流

JAVA-IO 流

什么是流

程序运行在内存中,文件存储在硬盘中。流概念:内存与存储设备之间传输数据的通道。

流向划分,分为:

输入流:将存储设备中的内容读入到内存

输出流:将内存中的内容写入到存储设备中

单位划分,分为:

字节流:可以读写所有的数据,因为所有的数据在硬盘中都是以字节为单位进行存储的

字符流:只能读写文本数据

功能划分,分为:

节点流:底层流,具有实际传输数据的读写功能 InputStream > FileInputStream

过滤流(缓冲流):在节点流的基础之上增强的功能 InputStream > FilterInputStream > BufferedInputStream(默认读取8k)


字节流是不带缓存的,效率没有缓冲流高。

缓冲流BufferedOutputStream.write()默认写到缓冲区内(不会像字节流一样直接写入到硬盘),flush()会将内容写入到文件中,close()方法内部默认调用了flush()。

例子:用水杯接水需要来回接很多次,但使用容器大的水壶接水,可以减少接水的次数,提高效率。

对象流

ObjectInputStream / ObjectOutputStream

  1. 增强了缓冲区功能

  2. 增强了读写8中基本类型和字符串功能

  3. 增强了读写对象的功能 readObject() / writeObject()

使用流 传输对象的过程 称为 序列化(output)/反序列化 (input)

序列化的对象必须实现Serializable接口,该接口本身没有任何代码,仅仅是一个标记接口,标记该类可以序列化

SerialVersionUID序列化版本id,作用是确保序列化的类和反序列化的类是同一个类

静态变量 和 transient修饰属性,则该属性不能被序列化


字符流首先要注意编码格式,编码与解码方式不一致,就会出现乱码

字符流的父类(抽象类)Reader / Writer

文件字符流:FileReader和FileWriter只能读写字符文本文件,不能读写二进制文件(例如图片等)

字符缓冲流:BufferedReader / BufferedWriter

高效读写;支持输入换行符newLine();可一次写一行,读一行readLine()

打印流:PrintWriter


转换流:InputStreamReader / OutputStreamWriter

将字节流转换为字符流;可设置字符的编码方式


File类

字节流/字符流只是内存和硬盘之间输入输出的过程,而File代表硬盘中的一个文件或文件夹,可以进行创建、删除、获取目录中的内容等操作。

  1. createNewFile() 创建文件

  2. mkdir() 创建目录

  3. delete() 删除文件或目录 ; deleteOnExit() jvm删除

  4. exists() 判断文件是否存在

  5. getAbsolutePath() 获取文件的绝对路径

  6. getName() 获取文件名称

  7. getParent() 获取文件/目录所在的目录

  8. isDirectory() 是否为目录

  9. isFile() 是否为文件

  10. length() 获取文件度

  11. listFiles() 列出目录中的所有内容

  12. renameTo() 修改文件名称

  13. lastModified() 获取文件的创建时间

  14. canWrite() 是否可写(windows系统支持该方法,linux系统也有对应的方法)

  15. list() 文件夹下的内容集合

路径分隔符(路径和路径之间的分割):File.pathSeparator ( ; )

名称分隔符(目录和目录之间的分隔):File.separator ( \ )

*练习:递归删除文件夹


FileFilter接口

当调用File类的listFiles()时,支持传入FileFilter接口实现类,对获取的文件进行过滤


Properties 属性集合,集成HashTable(线程安全)

  1. 存储 key value

  2. key value 都是固定的字符串类型,所有没有泛型

  3. 和流有关:list() 将集合数据打印到指定文件中 ;

    store() 将数据保存到指定文件中 ; load() 从指定properties文件中读取数据

posted @ 2021-12-21 13:52  迷路小孩  阅读(31)  评论(0)    收藏  举报