Java基础-IO流相关知识和用法

IO流

分类:

1、流向

A:输入流:读取数据

B:输出流:写入数据

2、数据类型

A:字节流

a:字节输入流 :读取数据 (抽象类的基类:InputStream)

b:字节输出流 :写入数据 (抽象类的基类:OutputStream)

B:字符流

a:字符输入流 :读取数据 (抽象类的基类:Reader)

b:字符输出流 :写入数据 (抽象类的基类:Writer)

一般情况下,如果没有明确说明按那种类型分类,默

认情况下,按照数据类型来分。

在这里插入图片描述## 由于流对象是一个抽象类,不能被实例化,所以要找到一个具体的子类

每种类型的流,都是以父类名作为后缀

XXXInputStream

XXXOutputStream

XXXReader

XXXWriter

构造方法

XXXOutputStream(File file)

XXXOutputStream(String name)

。。。。。。。

创建字节输出流对象之后系统的运行步骤

1、调用系统功能去创建文件

2、创建文件输出流对象

3、把对象指向这个文件

字节输出流的操作步骤

1、创建字节输出流对象

2、写数据

3、释放资源

在这里插入图片描述

字节流写入数据的方法

public void writer(int b)

写入一个字节

public void writer(byte[] b)

写入一个字节数组

public void writer(byte[] int off,int len)

写入一个字节数组的一部分(int off表示从哪个下标开始写入,int len表示从下标int off 开始 写入数组元素的个数)

在这里插入图片描述
在这里插入图片描述

如何实现数据的换行

1、写入换行符(回车的转义字符"\n")

2、针对不同的系统,换行的识别符号是不一样的

windows :\r\n

linux: \n

MacOS: \r

3、一些高级记事本可以识别任意的换行符号

如何实现数据的追加写入

构造方法第二个参数写true即可

创建一个向指定文件写入数据的输出文件流,第二个参数为true,则将字节写入文件末尾处。

FileOutputStream fos = new FileOutputStream(test2.txt,true);

在这里插入图片描述

在这里插入图片描述

对流对异常处理

在这里插入图片描述

字节输入流操作步骤(FileInputStream)

1、创建字节输入流对象

2、调用read()方法读取数据,并把数据显示在控制台

3、释放资源

字节输入流适合读取一些没有中文的文件,如果要读取有中文字符的文件,用字符输入流。

读取数据对方法

1、int read() 读取一个字节

2、int read(byte[] b) 一次读取一个字节数组

read()方法类似于迭代器中的next()的方法,读完一个元素,读取位置移动到下一个元素。

当读取位置到达文件末位是,则返回值为-1。

在这里插入图片描述

使用输入输出流复制文本文件中的内容

数据源

test.txt ---- 读取数据 ---- FileInputStream

目的地

test2.txt ---- 写数据 ---- FileOutputStream

将test.txt中的内容,复制到test.txt中

在这里插入图片描述

在计算机中,一个字节用来表示符合和英文,两个字节用来表示中文,在运行过程中是如何识别把两个字节拼接在一起转换为中文?

1、中文分为两个字节,第一个字节肯定是负数。

2、第二个字节常见的是负数,可能是正数,但是没有影响

在这里插入图片描述

使用输入输出流复制文件

需求:把某一目录下的文件,复制到另一个目录

数据源

Downloads文件夹下的 cosmos.jpg ---- 读取数据 ---- FileInputStream

目的地

Documents 文件夹下 ---- 写入数据 ---- FileOutputStream

在这里插入图片描述

使用int read(byte[] b)方法读取,再用writer(byte[] b)复制写入

在这里插入图片描述

使用输入输出流批量复制文件

需求:找出目标目录下的.mp4文件和.avi文件,.mov文件,复制到指定的目录中

在这里插入图片描述

在这里插入图片描述

字节缓冲流

字节流一次读取一个字节数组的速度,明显比一次读写一个字节的速度快,这是加入了数组这样的缓冲区效果,Java在设计的时候也考虑到了这样的设计思想(装饰设计模式)提供了字节缓冲区流

字节缓冲输出流

BufferedOutputStream

字节缓冲输入流

BufferedInputStream

构造方法可以指定缓冲区大小,一般用不上,默认的缓冲区大小基本够用

字节缓冲流,仅提供缓冲区,为高效而设计,真正的读写操作还是靠基本的流对象来实现的,所以字节缓冲区流的构造方法,不能传递一个具体的文件或者文件路径,而是传递一个OutputStream对象。

在这里插入图片描述

在这里插入图片描述

测试字节流和缓存流的效率比较(分别用两种方式:读写字节和读写字节数组)

将文件 西门庆大战多啦A梦.avi复制到指定目录下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/NONAME999/article/details/84934404
今日推荐