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对象表示的文件
构造方法作用:
-
创建一个FileOutputSream类
-
会根据构造方法中传递的文件/文件路径,创建一个空的文件
-
会把FileOutputStream对象指向创建好的文件
写入数据的原理
java程序→JVM(java虚拟机)→OS(操作系统)→OS调用写数据的方法→把数据写到文件中
字节输出流的使用步骤
-
创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
-
调用FileOutputStream对象中的方法write,把数据写入文件中
-
释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提高程序的效率)
注意
硬盘中存储的数据都是字节
任意的文本编辑器(记事本、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命名
构造方法的作用:
-
创建一个FileInputStream对象
-
把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读取
构造方法的作用:
-
创建一个FileReader对象
-
把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对象
构造方法的作用:
-
创建一个FileWriter对象
-
根据构造方法中传递的文件/文件路径,创建文件
-
把FileWriter对象指向创建好的文件
字符输出流的使用步骤
-
创建一个FileWriter对象,构造方法中传递写入数据的目的地
-
调用FileWriter对象中的方法write,把数据写到内存缓冲区中(字符转换成字节的过程)
-
调用FileWriter中的方法flush,把内存缓冲区中的数据刷新到文件中
-
释放资源(会把内存缓冲区中的数据刷新到文件中)
换行和追加
追加
FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据
换行
Windows:\r\n
LInux:\n