1 IO流的介绍
1.1 为什么要学习IO流
-
通过变量,数组,或者集合存储数据
-
都是不能永久化存储 , 因为数据都是存储在内存中
-
只要代码运行结束,所有数据都会丢失
-
-
使用IO流
-
1,将数据写到文件中,实现数据永久化存储
-
2,把文件中的数据读取到内存中(Java程序)
-
1.2 什么是IO流
-
I 表示intput ,是数据从硬盘进内存的过程,称之为读。
-
O 表示output ,是数据从内存到硬盘的过程。称之为写
-
IO的数据传输,可以看做是一种数据的流动,按照流动的方向,以内存为参照物,进行读写操作
-
简单来说:内存在读,内存在写
-
1.3 IO流的分类
-
按照流向区分
-
输入流 : 用来读数据
-
输出流 : 用来写数据
-
-
按照类型区分
-
字节流
-
字符流
-
-
注意 :
-
字节流可以操作任意文件
-
字符流只能操作纯文本文件
-
用windows记事本打开能读的懂,那么这样的文件就是纯文本文件。
-
2 字节流输出流
2.1 字节输出流入门
-
FileOutputStream类 :
-
OutputStream
有很多子类,我们从最简单的一个子类开始。 -
java.io.FileOutputStream
类是文件输出流,用于将数据写出到文件
-
-
构造方法 :
-
public FileOutputStream(File file)
:创建文件输出流以写入由指定的 File对象表示的文件。 -
public FileOutputStream(String name)
: 创建文件输出流以指定的名称写入文件。public class FileOutputStreamConstructor throws IOException { public static void main(String[] args) { // 使用File对象创建流对象 File file = new File("a.txt"); FileOutputStream fos = new FileOutputStream(file); // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("b.txt"); } }
-
字节输出流写数据快速入门
-
创建字节输出流对象。
-
写数据
-
释放资源
public class OutputStreamDemo1 { public static void main(String[] args) throws IOException { // 创建字节输出流对象 // 如果指定的文件不存在 , 会自动创建文件 // 如果文件存在 , 会把文件中的内容清空 FileOutputStream fos = new FileOutputStream("day11_demo\\a.txt"); // 写数据 // 写到文件中就是以字节形式存在的 // 只是文件帮我们把字节翻译成了对应的字符 , 方便查看 fos.write(97); fos.write(98); fos.write(99); // 释放资源 // while(true){} // 断开流与文件中间的关系 fos.close(); } }
2.2 字节输出流写数据的方法
-
字节流写数据的方法
-
1 void write(int b) 一次写一个字节数据
-
2 void write(byte[] b) 一次写一个字节数组数据
-
3 void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /* 字节流写数据的3种方式 1 void write(int b) 一次写一个字节数据 2 void write(byte[] b) 一次写一个字节数组数据 3 void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据 */ public class OutputStreamDemo2 { public static void main(String[] args) throws IOException { // 创建字节输出流对象 FileOutputStream fos = new FileOutputStream("day11_demo\\a.txt"); // 写数据 // 1 void write(int b) 一次写一个字节数据 fos.write(97); fos.write(98); fos.write(99); // 2 void write(byte[] b) 一次写一个字节数组数据 byte[] bys = {65, 66, 67, 68, 69}; fos.write(bys); // 3 void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据 fos.write(bys, 0, 3); // 释放资源 fos.close(); } }
-
2.3 写数据的换行和追加写入
3 字节输入流
3.1 字节输入流介绍
-
字节输入流类
-
InputStream类 : 字节输入流最顶层的类 , 抽象类 --- FileInputStream类 : FileInputStream extends InputStream
-
-
构造方法
-
public FileInputStream(File file) : 从file类型的路径中读取数据
-
public FileInputStream(String name) : 从字符串路径中读取数据
-
-
步骤
-
创建输入流对象
-
读数据
-
释放资源
-
3.2 字节输入流读多个字节
3.3 图片的拷贝
3.4 异常的捕获处理
-
JDK7版本之前处理方式 : 手动释放资源
JDK7版本优化处理方式 : 自动释放资源
-
JDK7优化后可以使用 try-with-resource 语句 , 该语句确保了每个资源在语句结束时自动关闭。 简单理解 : 使用此语句,会自动释放资源 , 不需要自己在写finally代码块了
-
格式 :
3.4 字节输入流一次读一个字节数组
-
FileInputStream类 :
-
public int read(byte[] b) : 从输入流读取最多b.length个字节的数据, 返回的是真实读到的数据个数
-
4 字节缓冲区流
4.1 字节缓冲流概述
-
字节缓冲流:
-
BufferOutputStream:缓冲输出流
-
BufferedInputStream:缓冲输入流
-
-
构造方法:
-
字节缓冲输出流:BufferedOutputStream(OutputStream out)
-
字节缓冲输入流:BufferedInputStream(InputStream in)
-
-
为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
-
字节缓冲流仅仅提供缓冲区,不具备读写功能 , 而真正的读写数据还得依靠基本的字节流对象进行操作
-