ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础入门:字符输出流、字符输入流

2022-01-27 10:30:32  阅读:113  来源: 互联网

标签:字符 读取 Java 入门 文件 写入 数组 字节


转自:微点阅读  https://www.weidianyuedu.com/content/5517439261345.html

我们平时在使用计算机的过程中,会用到一个非常常用的操作:复制粘贴。

它可以将一个文件复制成另一个文件。

根据我们昨天学的两种字符流,面对这种需求该如何操作?

一、IO流复制文件

说白了,复制文件的过程就是一边读一边写的过程。代码如下:

1.方法一

①创建输入流:

a.jpg是计算机里已经存在的文件,所以创建输入流将其读取到内存。

②创建输出流:

我们需要将a.jpg复制下来,那么文件名我们可以自己定义名字,在创建输出流时,直接创建该文件。

③复制文件:

使用fis.read()可以读取文件,使用fos.write(read)可以将读到的内容写入文件。

最后不要忘了使用close方法关流。

这样运行代码,就可以将“a.jpg”文件复制成“刘小爱.jpg”。以上方法为一个字节一个字节地读取与写入,同样的道理,也可以一个字节数组一个字节数组地读取与写入。

代码如下:

2.方法二

首先定义一个字节数组buffer;

其次将文件的内容按照数组长度读取到buffer中;

最后同时将buffer写入另一个文件。

这两种方式,哪种方式更有效率?自然是第二种方式更有效率。

为什么呢?

以一个我们现实生活中的例子来理解就是:

字节就好比是杯子,字节数组就好比是桶。

是用桶打水快,还是用杯子打水快?问题显而易见。

这个例子可能不算准确,但确实更加地好理解。

以上就是昨天学习的两种字节流的应用。今天再学习两种字符流:

二、字符流

1.字符输入流

Reader是一个抽象类,是用于读取字符流的所有类的最上层父类,其中FileReader类是其常用子类。

a.txt中的内容为:刘小爱

①使用字节输入流读取文件

“刘小爱”读取的结果是9个字节,也就是说在字节流中,一个中文是3个字节。

②使用字符输入流读取文件

“刘小爱”读取的结果是3个字符。

所以字符说白了就是字节+编码表:

其中ASCII码表是最基础的编码表;

中国也有自己的编码表GBK;

UTF-8编码,这是一个国际通用编码,最常用。

在开发中一般也就是使用这个UTF-8编码。

其中编码和解码的编码表要一致,不然会出现乱码,也就是读文件和写文件时的编码表要是一样的。

以上是一个字符一个字符地输入,同样的道理,也可以一个字符数组一个字符数组地输入。

2.利用char数组输入

首先定义一个固定长度的字符数组char[];

然后将文件按char数组长度读到char数组中;

最后将char数组以字符串的形式打印出来。

3.字符输出流

Writer也是一个抽象类,是用于写出字符流的所有类的最上层父类,其中FileWriter 类是其常用子类。

①使用writer方法直接写入字符

数字会按照ASCII码表转换成对应的字符。

②使用writer方法直接写入字符串

字符串其实也就相当于是一个字符数组,所以写入一个字符数组可以,直接写入一个字符串也可以。

③close方法关流

如果不关流的话,是无法将内容写入文件里面的,所以得关流。

但是一旦关流了,就没法再次写入了,想再次写入,又得创建输出流。

如果仅仅只是想保存,还希望继续编辑怎么办呢?

这就要使用到另一个方法叫flush。

4.close和flush

①flush方法

flush,刷新的意思,也就是说我们写入了一个数据,得刷新下才会将数据保存。在使用flush方法后,还可以继续写入文件。

②close方法

close方法,关流,它在关流时底层会调用flush方法。在使用close方法后,就不可以继续写入文件了。

总之close和flush的区别:

close就好比我们写东西在记事本上,保存并退出编辑。

flush就好比我们写记事本,点保存但是没退出(Ctrl+s),还可以继续编辑。

标签:字符,读取,Java,入门,文件,写入,数组,字节
来源: https://blog.csdn.net/ysds20211402/article/details/122688335

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有