0%

Java/Java-黑马教程

Java-黑马教程

I/O

硬盘: 永久存储
内存: 临时存储

I: input输入,读取
O: output输出,写入
流: 数据(字符,字节)
1字符=2字节=
1字节=8个二进制位(即8个byte)

输入:把硬盘中的数据读取到内存中使用
输出 :把内存中的数据写入到硬盘中保存
-w1448

字节流

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

OutputStream 字节输出流

此抽象类是表示输出字节流的所有类的超类
定义了一些子类共性的成员方法。

FileOutputStream 文件字节输出流

作用: 把内存中的数据写入到硬盘的文件中

构造方法:

FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。

参数: 写入数据的目的地
string name:目的地是一个文件的路径
File file: 目的地是一个文件
构造方法的作用:

  1. 创建一个FileOutputStream对象
  2. 会根据构造方法中传递的文件/文件路径,创建一个空的文件
  3. 会把FileOutputStream对象只想创建好的文件
写入数据

原理:如果 内存 -> 硬盘
java程序 — JVM(java虚拟机)— OS(操作系统)— OS调用写数据的方法 — 把数据写入到文件

字节流的使用步骤(重点)

  1. 创建一个FIleOutputStream对象,构造方法中传入数据的目的地
  2. 调用FIleOutputStream对象中的方法write,把数据写入到文件中
  3. 释放资源(这样可以节约内存,因为流的使用会占用一定的内存)

文件存储的原理和记事本打开
写数据的时候会把十进制的整数转换为二进制的整数

记事本在打开文件的时候都会查询编码表,把字节转换为字符表示,故如果写入为:
0-127 - 查询ASCII表
其他值:会查询系统默认码表(中文系统GBK)
-w1433

一次写多个字节的方法

-w706
第一个:
用于一次写多个字节:

  • 如果写的第一个字节是正数(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 文件字节输入流

-w354

作用: 把硬盘文件中的数据,读取到内存中使用

构造方法:
-w1110

参数:
读取文件的数据源
String name:文件的路径
File file: 文件
构造方法的作用:

  1. 会创建一个FileInputStream对象

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

    读取数据的原理:
    原理:如果 硬盘 -> 内存
    java程序 — JVM(java虚拟机)— OS(操作系统)— OS调用读数据的方法 — 读入文件
    使用步骤:

    1. 创建一个FileInputStream对象,构造方法中绑定要读取的数据
    2. 使用FileInputStream对象中的方法read,读取文件
      int read()读取文件中的一个字节并返回,读取到文件的末尾返回-1
    3. 释放资源

注意
不知道文件中有多少字节,使用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())
}

方法