七叶笔记 » java编程 » Java字节缓存流的构造方法之文件IO流

Java字节缓存流的构造方法之文件IO流

前言:

我们从上篇文章开始给大家介绍Java中IO流的相关知识,本文接着上文的内容,接续给大家介绍Java文件的读入读出流。

1.字节缓冲流

1.1字节缓冲流构造方法 字节缓冲流介绍 ​​lBufferOutputStream​​:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用​​lBufferedInputStream​​​:创建​​BufferedInputStream​​将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。 构造方法:

示例代码

大家在运行该代码的时候,将相应的各种包导进去,另外将代码里面相应的路径换成读者自己的,代码就可以完美运行了,可以看看其效果。

1.2字节流复制视频 案例需求

把“E:\yijizhichang\字节流复制图片.avi”复制到模块目录下的“字节流复制图片.avi”

实现步骤 根据数据源创建字节输入流对象根据目的地创建字节输出流对象读写数据,复制视频释放资源代码实现

2.字符流

2.1为什么会出现字符流 字符流的介绍

由于字节流操作中文不是特别的方便,所以Java就提供字符流

字符流 = 字节流 + 编码表

中文的字节存储方式

用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别是中文的呢?

汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数

2.2编码表 什么是字符集

是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等

l计算机要准确的存储和识别各种字符集符号,就需要进行字符编码,一套字符集必然至少有一套字符编码。常见字符集有ASCII字符集、GBXXX字符集、Unicode字符集等

常见的字符集 ASCII字符集:

lASCII:是基于拉丁字母的一套电脑编码系统,用于显示现代英语,主要包括控制字符(回车键、退格、换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号)

基本的ASCII字符集,使用7位表示一个字符,共128字符。ASCII的扩展字符集使用8位表示一个字符,共256字符,方便支持欧洲常用字符。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等

GBXXX字符集:

GBK:最常用的中文码表。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等

Unicode字符集:

UTF-8编码:可以用来表示Unicode标准中任意字符,它是电子邮件、网页及其他存储或传送文字的应用 中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。它使用一至四个字节为每个字符编码

编码规则:

128个US-ASCII字符,只需一个字节编码

拉丁文等字符,需要二个字节编码

大部分常用字(含中文),使用三个字节编码

其他极少使用的Unicode辅助字符,使用四字节编码

2.3字符串中的编码解码问题 相关方法

代码演示

2.4字符流中的编码解码问题 字符流中和编码解码问题相关的两个类 ​​InputStreamReader​​:是从字节流到字符流的桥梁

它读取字节,并使用指定的编码将其解码为字符

它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

OutputStreamWriter:是从字符流到字节流的桥梁

是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节

它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

构造方法

代码演示

2.5字符流写数据的5种方式 方法介绍

刷新和关闭的方法

代码演示

2.6字符流读数据的2种方式 方法介绍

代码演示

2.7字符流复制Java文件 案例需求

把模块目录下的“​​ConversionStreamDemo.java​​​” 复制到模块目录下的“​​Copy.java​​”

实现步骤 根据数据源创建字符输入流对象根据目的地创建字符输出流对象读写数据,复制文件释放资源代码实现

2.8字符流复制Java文件改进版 案例需求

使用便捷流对象,把模块目录下的“​​ConversionStreamDemo.java​​​” 复制到模块目录下的“​​Copy.java​​”

实现步骤 根据数据源创建字符输入流对象根据目的地创建字符输出流对象读写数据,复制文件释放资源代码实现

2.9字符缓冲流 字符缓冲流介绍 ​​BufferedWriter​​:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途​​BufferedReader​​:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途构造方法

代码演示

2.10字符缓冲流复制Java文件 案例需求

把模块目录下的​​ConversionStreamDemo.java​​​ 复制到模块目录下的​​ Copy.java​​

实现步骤 根据数据源创建字符缓冲输入流对象根据目的地创建字符缓冲输出流对象读写数据,复制文件,使用字符缓冲流特有功能实现释放资源代码实现

2.11字符缓冲流特有功能 方法介绍

   BufferedWriter:

代码演示

2.12字符缓冲流特有功能复制Java文件 案例需求

使用特有功能把模块目录下的ConversionStreamDemo.java 复制到模块目录下的​​ Copy.java​​

实现步骤 根据数据源创建字符缓冲输入流对象根据目的地创建字符缓冲输出流对象读写数据,复制文件,使用字符缓冲流特有功能实现释放资源代码实现

2.13IO流小结 字节流

字符流

3练习案例

3.1集合到文件 案例需求

把文本文件中的数据读取到集合中,并遍历集合。要求:文件中每一行数据是一个集合元素

实现步骤 创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字符串数据存储到集合中释放资源遍历集合代码实现

3.2文件到集合 案例需求

把ArrayList集合中的字符串数据写入到文本文件。要求:每一个字符串元素作为文件中的一行数据

实现步骤 创建ArrayList集合往集合中存储字符串元素创建字符缓冲输出流对象遍历集合,得到每一个字符串数据调用字符缓冲输出流对象的方法写数据释放资源代码实现

3.3点名器 案例需求

我有一个文件里面存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随点名器

实现步骤 创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字符串数据存储到集合中释放资源使用Random产生一个随机数,随机数的范围在:[0,集合的长度)把第6步产生的随机数作为索引到ArrayList集合中获取值把第7步得到的数据输出在控制台代码实现

3.4集合到文件改进版 案例需求

把ArrayList集合中的学生数据写入到文本文件。要求:每一个学生对象的数据作为文件中的一行数据​

格式:学号,姓名,年龄,居住地 举例:yijizhichang001,林青霞,30,西安

实现步骤 定义学生类创建ArrayList集合创建学生对象把学生对象添加到集合中创建字符缓冲输出流对象遍历集合,得到每一个学生对象把学生对象的数据拼接成指定格式的字符串调用字符缓冲输出流对象的方法写数据释放资源代码实现 学生类 测试类

3.5文件到集合改进版 案例需求

把文本文件中的数据读取到集合中,并遍历集合。要求:文件中每一行数据是一个学生对象的成员变量值

举例:yijizhichang001,林青霞,30,西安

实现步骤 定义学生类创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字符串数据用split()进行分割,得到一个字符串数组创建学生对象把字符串数组中的每一个元素取出来对应的赋值给学生对象的成员量值把学生对象添加到集合释放资源遍历集合代码实现

由于Student类和上一题目是一致的,因此在这里不再赘述,直接给出测试类。

测试类

总结

本文主要给大家介绍了字节缓存流的构造方法,同时也介绍了字符流中的一些相关的内容,并且通过大量的案例供大家理解。最后通过一些经典的案例帮助大家对前面所学的知识做了一个综合的应用。这篇文章也是没有给出代码的运行结果图,一方面是由于相应的资料大家没有,就是给出运行图效果也不是很好。另外也是最关键的一点,没有运行图就是督促读者自己去运行代码,这样间接地帮助大家理解一些代码的实现过程。但是代码没有任何的问题。最多就是需要大家把该导的包导进去,还有就是把涉及到的到路径换成自己电脑上有的路径就可以了。在这里我们的所有File类以及相关文件读入读出的流就已经全部给大家介绍完毕了,希望大家认真学习,不断提高自己的编程能力。我还是强烈建议大家去动手操作一下,这样才能有一个很大的收获

到此这篇关于Java字节缓存流的构造方法之文件IO流的文章就介绍到这了,更多相关Java文件IO流内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章