JavaIO流

理解输入与输出

  input 输入:硬盘 → 内存

  output 输出:内存 → 硬盘

  流:数据(字符/字节)1个字符=2个字节 1个字节=8位(二进制)

字节流

输出流

声明:一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都是一个一个的字节。那么在传输时一样如此。所以,字节流可以传输任意文件数据。在操作流时,我们要时刻明确,无论是用什么样的流对象,底层传输始终为二进制数据。

java.io.OutputStream 字节输出流

此抽象类是表示输出字节流所有类的父类(超类)

子类共性的成员方法:

void close() 关闭此输出流并释放与此流相关联的任何系统资源。

void flush() 刷新此输出流并强制任何缓冲的输出字节被写出。

void write(byte[] b) 将 b.length字节从指定的字节数组写入此输出流。

void write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。

abstract void write(int b) 将指定的字节写入此输出流。

FileOutputStream类

java.io.FileOutputStream 文件字节输出流

构造方法

FileOutputStream(String name) 创建文件输出流以指定的名称写入文件

FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件

构造方法作用:

  1. 创建一个FileOutputSream类

  2. 会根据构造方法中传递的文件/文件路径,创建一个空的文件

  3. 会把FileOutputStream对象指向创建好的文件

写入数据的原理

java程序→JVM(java虚拟机)→OS(操作系统)→OS调用写数据的方法→把数据写到文件中

字节输出流的使用步骤
  1. 创建一个FileOutputStream对象,构造方法中传递写入数据的目的地

  2. 调用FileOutputStream对象中的方法write,把数据写入文件中

  3. 释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提高程序的效率)

注意

硬盘中存储的数据都是字节

任意的文本编辑器(记事本、notepad++...)

在打开文件的时候,都会查询编码表,把字节转换成为字符表示

  0-127查询ASCII表

  其他值查询系统默认码表(中文系统GBK)

一次写多个字节的方法

  void write(byte[] b) 将 b.length个字节从指定的字节数组写入此文件输出流

  一次写多个字节:

    如果写的第一个字节是整数(0-127),那么会查询ASCII表

    如果写的第一个字节是负数,那么第一个字节会和第二个字节组成一个中文显示,查询系统默认码表(GBK)

  void write(byte[] b, int off, int len) 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流

写字符的方法

可以使用String类中的方法把字符串转换成字节数组

byte[] getbyte() 把字符串转化为字节数组

数据的追加

FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件

FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件

boolean append 追加开关

  true 末尾追加

  false 覆盖原文件

换行

  Windows:\r\n

  Linux:/n

  mac:/r

输入流

java.io.IutputStream 字节输入流

此抽象类是表示输入字节流所有类的父类(超类)

子类共性的成员方法:

void close() 关闭此输入流并释放与流相关联的任何系统资源

int read(byte[] b) 从输入流读取一些字节数,并将它们存储到缓冲区 b

int read(byte[] b, int off, int len) 从输入流读取最多 len字节的数据到一个字节数组

FileInputStream类
构造方法

FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名

FileInputStream(File file) 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名

构造方法的作用:

  1. 创建一个FileInputStream对象

  2. 把FileInputStream对象指定构造方法中要读取的文件

写入数据的原理

java程序→JVM(java虚拟机)→OS(操作系统)→OS调用读取数据的方法→读取文件

方法

  int read() 从该输入流读取一个字节的数据

  int read(byte[] b) 从该输入流读取最多 b.length个字节的数据为字节数组

  明确:

      参数byte[] b的作用:起到缓冲作用,存储每次读到的多个字节 数组的长度为1024(1kb)或者1024的整数倍

      返回值int是每次读取的有效字节个数

  int read(byte[] b, int off, int len) 从该输入流读取最多 len字节的数据为字节数组

String类的构造方法

String (byte[] bytes) 把字节数组转化为字符串

String (byte[] bytes, int offset, int length) 把字符数组的一部分转化为字符串

字符流

输入流

java.io.Reader 读取字符流

此抽象类是表示输入字符流所有类的父类(超类)

子类共性的成员方法:

abstract void close() 关闭流并释放与之相关联的任何系统资源

int read(char[] cbuf) 将字符读入数组

abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分

FileReader类
构造方法

FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称

FileReader(File file) 创建一个新的 FileReader ,给出 File读取

构造方法的作用:

  1. 创建一个FileReader对象

  2. 把FileReader对象指定构造方法中要读取的文件

输出流

java.io.Writer 写出字符流

此抽象类是表示写出字符流所有类的父类(超类)

子类共性的成员方法:

abstract void close() 关闭流,先刷新

abstract void flush() 刷新流

void write(char[] cbuf) 写入一个字符数组

abstract void write(char[] cbuf, int off, int len) 写入字符数组的一部分

void write(int c) 写一个字符

void write(String str) 写一个字符串

void write(String str, int off, int len) 写一个字符串的一部分

FileWriter类
构造方法

FileWriter(String fileName) 构造一个给定文件名的FileWriter对象

FileWriter(File file) 给一个File对象构造一个FileWriter对象

构造方法的作用:

  1. 创建一个FileWriter对象

  2. 根据构造方法中传递的文件/文件路径,创建文件

  3. 把FileWriter对象指向创建好的文件

字符输出流的使用步骤
  1. 创建一个FileWriter对象,构造方法中传递写入数据的目的地

  2. 调用FileWriter对象中的方法write,把数据写到内存缓冲区中(字符转换成字节的过程)

  3. 调用FileWriter中的方法flush,把内存缓冲区中的数据刷新到文件中

  4. 释放资源(会把内存缓冲区中的数据刷新到文件中)

换行和追加

追加

FileWriter(File file, boolean append) 给一个File对象构造一个FileWriter对象

FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据

换行

Windows:\r\n

LInux:\n

Mac:\r

posted @ 2021-02-23 15:48  栎眠尔  阅读(63)  评论(0编辑  收藏  举报