打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【Java】基础42:字符输出流、字符输入流

今天是我自学Java的第42天。

感谢你的观看,谢谢你。

话不多说,开始今天的学习:

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

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

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

一、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),还可以继续编辑。

总结

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
delphi2010 调用webservice注意事项
字符,字符串,字符数组的尾部问题
Java Java 7 源码学习系列(一)——String
Java String源码解析
VC++下处理UTF8编码的字符串
字符集、编码和字体
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服