Java IO流原理

  1. I/O是Input/Output缩写,用于处理数据传输,如读写文件,网络通讯等
  2. java程序中,对数据的输入输出操作以流的方式进行
  3. java.io包下有各种“流”类和接口,以获取不同种类数据,并通过方法输入或输出数据
  4. 输入:读取外部数据(磁盘、光盘等)到程序(内存)中
  5. 输出:将程序数据输出到存储设备中

流的分类

  1. 按操作数据单位不同分为:字节流(8bit)-二进制文件,字符流(按字符,对应几个字节)-文本文件
  2. 按数据流的流向不同分为:输入流,输出流
  3. 按流的角色不同分为:节点流,处理流/包装流

alt text

InputStream :字节输入流

常用子类:

  1. FileInputStream :文件输入流
  2. BufferedInputStream:缓冲字节输入流
  3. ObjectInputStream:对象字节输入流

FileInputStream

alt text

FileOutputStream

如果文件不存在会创建文件 alt text

拷贝文件

使用FileInputStream和FileOutputStream来拷贝文件 先用FileInputStream读取,存在一个byte类型的buf数组中,并同时用int readLen获取读取到的长度。然后用FileOutputStream的write(buf, 0, readLen)的方式来输出文件内容,而不是直接用write(buf),因为有可能buf大小不够,一次性读不完,最后一次写入的时候,可能只剩下几个字节了,但你又写了buf.length的大小进去。

FileReader

相关方法:

  1. new FileReader(File/String)
  2. read:每次读单个字符,返回该字符,到文件末尾返回-1
  3. read(char[]):读取多个字符到数组,返回读取到的字符数,文件末尾返回-1 常用API:
  4. new String(char[])
  5. new String(char[], off, len)

FileWriter

  1. new FileWriter(File/String): 覆盖模式,流的指针在首端
  2. new FileWriter(File/String, true): 追加模式,流的指针在末端
  3. write(int):写单个字符
  4. write(char[]): 写入指定数组
  5. write(char[], off, len)
  6. write(String):写入整个字符串
  7. write(String, off, len) 常用API:String: toCharArray: String转换成char[]

FileWriter使用后,必须要关闭(close)或刷新(0flush),否则写入不到指定文件


本文章使用limfx的vscode插件快速发布