文件的本质

  • 字节(Byte)流
  • 程序可以像水流一样有顺序地一个个字节读写文件,这个过程就叫Input/Output

    InputStream/OutputStream

  • 抽象的输入/输出操作,无论是:

    • 从网络读取字节流
    • 文件写入字节流
    • 从其他地方读取字节流
  • FileInputStream/FileOutputStream
  • 如果不是特别熟悉Java文件系统,请使用绝对路径

Java的文件类File

  • File并不代表一个“文件”,它代表一个“路径”
  • 抽象的“文件”路径:文件or文件夹
  • File的常见方法
    • exists
    • isDirectory/isFile
    • list/listFiles
    • getName
    • getParentFile
    • getCanonicalPath/getCanonicalFile
  • 绝对路径与相对路径
  • 读/写文件
  • NIO(Java 7+)
    • New IO
    • Non-blocking IO
  • NIO的Path —— 就是旧版的File

Java的NIO

  • Path
    • 可以和File互转
  • 经典的IO模型是基于流的
    • 非常直观,容易理解,方便抽象
    • 但是非常慢,按顺序一个个字节
  • NIO模型是基于块的(Buffer)
    • 块和块之间没有顺序,可以同时写,比基于流的更快

FIles(File相关工具方法的集合)

  • Collection对应的工具方法合集为:Collections
  • Java中工具合集的命名习惯

CPU与磁盘的矛盾

  • 对于CPU的计算速度来说,磁盘的IO太慢了
    • CPU等待IO浪费了很多时间
  • 解决方法:
      1. 缓冲
      1. 并发(多线程):在等待IO的时候CPU做些其他事
  • BufferReader/Writer
    • BufferReader — 一次性读取很多东西到缓冲区
    • BufferWriter — 一次性写很多东西到缓冲区

第三方IO轮子

  • Apache Commons IO