Java-黑马教程
I/O
硬盘: 永久存储
内存: 临时存储
I: input输入,读取
O: output输出,写入
流: 数据(字符,字节)
1字符=2字节=
1字节=8个二进制位(即8个byte)
输入:把硬盘中的数据读取到内存中使用
输出 :把内存中的数据写入到硬盘中保存
字节流
一切文件数据(文本、图片、视频)都是以字节方式存储的。
所以,字节流可以传输任意文件数据,在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终是二进制数据
OutputStream 字节输出流
此抽象类是表示输出字节流的所有类的超类
定义了一些子类共性的成员方法。
FileOutputStream 文件字节输出流
作用: 把内存中的数据写入到硬盘的文件中
构造方法:
FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
参数: 写入数据的目的地
string name:目的地是一个文件的路径
File file: 目的地是一个文件
构造方法的作用:
- 创建一个FileOutputStream对象
- 会根据构造方法中传递的文件/文件路径,创建一个空的文件
- 会把FileOutputStream对象只想创建好的文件
写入数据
原理:如果 内存 -> 硬盘
java程序 — JVM(java虚拟机)— OS(操作系统)— OS调用写数据的方法 — 把数据写入到文件
字节流的使用步骤(重点)
- 创建一个FIleOutputStream对象,构造方法中传入数据的目的地
- 调用FIleOutputStream对象中的方法write,把数据写入到文件中
- 释放资源(这样可以节约内存,因为流的使用会占用一定的内存)
文件存储的原理和记事本打开
写数据的时候会把十进制的整数转换为二进制的整数
记事本在打开文件的时候都会查询编码表,把字节转换为字符表示,故如果写入为:
0-127 - 查询ASCII表
其他值:会查询系统默认码表(中文系统GBK)
一次写多个字节的方法
第一个:
用于一次写多个字节:
- 如果写的第一个字节是正数(0-127),那么显示的时候会查询ASCII表
- 如果写的第一个字节是负数,那么第一个字节会和第二个字节,连个字节组成一个中文显示,查询系统默认码表(GBK)
第二个用来写字节数组的一部分:
int off: 数组的开始索引
int len: 写几个字节
另外一种写入字符的方法:
使用String类中的方法把字符串,转换为字节数组
数据的续写和换行写
续写即追加写
构造方法:
FileOutputStream(String name, boolean append)
创建一个向具有指定 name 的文件中写入数据的输出文件流。
FileOutputStream(File file, boolean append)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
参数:
String name,File file : 写入数据的目的地
boolean append: 续写开关
- true: 继续在文件末尾续写数据
- false: 创建一个新文件,覆盖
换行写,写完数据之后写上换行符号
InputStream 字节输入流
方法:
int read()
从此输入流中读取下一个数据字节。
int read(byte[] b)
从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。
void close()
关闭此输入流并释放与此流关联的所有系统资源。
FileinputStream 文件字节输入流
作用: 把硬盘文件中的数据,读取到内存中使用
构造方法:
参数:
读取文件的数据源
String name:文件的路径
File file: 文件
构造方法的作用:
会创建一个FileInputStream对象
会把FileInputStream对象指向构造方法中要读取的文件
读取数据的原理:
原理:如果 硬盘 -> 内存
java程序 — JVM(java虚拟机)— OS(操作系统)— OS调用读数据的方法 — 读入文件
使用步骤:- 创建一个FileInputStream对象,构造方法中绑定要读取的数据
- 使用FileInputStream对象中的方法read,读取文件
int read()读取文件中的一个字节并返回,读取到文件的末尾返回-1 - 释放资源
注意
不知道文件中有多少字节,使用while循环
boolean表达式:while((len = fis.read())!= -1){
}
实际过程:
int len;
len = fis.read();
len = fis.read())!= -1
而不能写成:
while((fis.read())!= -1){
System.out.println(fis.read())
}
方法