聊聊为什么要使用BufferedReader读取File
使用BufferedReader读取File
Java编程思想一书里面有云,为了提高速度,可以用BufferedReader过滤器类,以提供缓冲区域。但是这个解释太简略了,看了这句话仍然不知道为什么要使用它,于是感觉值得研究一下。
其实只用FileReader也能完成读取文件的任务。
FileReader有三个用于read的函数
public int read()
:每次只read一个字符public int read(char cbuf[], int offset, int length)
:每次read从offset到offset+length-1的字符,然后放进cbuf中public int read(char cbuf[])
:一次性的read出来所有的字符,直接放入cbuf中
这三个read方法,每次调用一次就会read一次file,进行一次IO。不管是多次read还是一次性的read,都不是很优雅的在read文件的方式。多次read必然会产生多次IO,一次性的read如果遇到很大的文件,对内存是极不友好的。
于是BufferedReader就显现出好处来了。BufferedReader使用装饰器模式,它的IO行为是每次读进来8k的数据到缓冲区,如果需要使用数据的时候,再直接从缓冲区里面拿出数据来使用。这样一来,既提高的读取速度,又节省了IO的次数,是一种比较优雅的读取文件的方式。
使用BufferedReader读取File的代码举例
BufferedReader bufferedReader = new BufferedReader(new FileReader("./pom.xml")); StringBuilder stringBuilder = new StringBuilder(); while ((s = bufferedReader.readLine()) != null) { stringBuilder.append(s + "\n"); } System.out.println(stringBuilder.toString());
使用BufferedReader循环读文件(新手要注意的细节)
使用BufferedReader(缓存读取流)可以每次读取文件的一行。对于文件内容如果是按行为单位排列的话,则使用BufferedReader来读取文件还是比较方便的。
举例如下
1、BufferedReader读取一行
在F盘下有个txt文件,文件内容为
import java.io.*; public class test { public static void main(String[] args) { BufferedReader br = null; try { br = new BufferedReader(new FileReader("F:\\test.txt")); System.out.println(br.readLine()); } catch (IOException e) { e.printStackTrace(); } }
结果为:
哈哈0
2、BufferedReader循环读每一行
import java.io.*; public class test { public static void main(String[] args) { BufferedReader br = null; try { br = new BufferedReader(new FileReader("F:\\test.txt")); String text = null; //读取内容为null则表示读到了文件末尾 while ((text = br.readLine()) != null) { System.out.println(text); } } catch (IOException e) { e.printStackTrace(); } }
结果为:
哈哈0
哈哈1
哈哈2
哈哈3
哈哈4
哈哈5
哈哈6
哈哈7
哈哈8
哈哈9
3、注意细节
新手如果没不注意,容易写成:
import java.io.*; public class test { public static void main(String[] args) { BufferedReader br = null; try { br = new BufferedReader(new FileReader("F:\\test.txt")); String text = null; // while (true) { if (br.readLine() == null) { break; } System.out.println(br.readLine()); } } catch (IOException e) { e.printStackTrace(); } }
结果为:
哈哈1
哈哈3
哈哈5
哈哈7
哈哈9
原因
while (true) { if (br.readLine() == null) { break; } System.out.println(br.readLine()); }
因为在while循环中, if 语句在做判断时,其实已经读取了一行,而读取的这行没有被打印出来,所以就造成了只打印了一部分。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/zx_emily/article/details/86751624
相关文章
详解Maven profile配置管理及激活profile的几种方式
这篇文章主要介绍了详解Maven profile配置管理及激活profile的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26- 一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件.但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作. 于是, 很多时候, 我们采用让PHP来做转发, 为用户提供文件下载...2014-06-07
- 这篇文章主要介绍了使用maven的profile构建不同环境配置的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26
- 今天小编就为大家分享一篇python+tifffile之tiff文件读写方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- __FILE__在php是表示当前文件绝对路径哦,下面我们来看看简单的FILE的实例吧。 《?php echo __FILE__; ?> E:phpinfo.php 那么我们会看到很多cms中会这样写 dirname...2016-11-25
- 本文主要介绍了java中MultipartFile互转File的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-25
Lua中的loadfile、dofile、require详解
这篇文章主要介绍了Lua中的loadfile、dofile、require详解,本文分别用实例讲解它的用法和特点等内容,需要的朋友可以参考下...2020-06-30- 这篇文章主要为大家分享了jQuery Ajax File Upload实例源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-09
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
这篇文章主要介绍了解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-01Dockerfile 中 VOLUME 与 docker -v 的区别说明
这篇文章主要介绍了Dockerfile 中 VOLUME 与 docker -v 的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-23centos下file_put_contents()无法写入文件的原因及解决方法
下面小编就为大家带来一篇centos下file_put_contents()无法写入文件的原因及解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03浅谈缓冲字符流 BufferedReader BufferedWriter用法
这篇文章主要介绍了缓冲字符流 BufferedReader BufferedWriter的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-21- 这篇文章主要介绍了C语言 makefile学习及实现实例的相关资料,需要的朋友可以参考下...2020-04-25
java.io.File的renameTo方法移动文件失败的解决方案
这篇文章主要介绍了java.io.File的renameTo方法移动文件失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-07- php readfile 函数 readfile ( PHP 4中, PHP 5中) readfile -输出一个文件 描述 国际readfile (字符串$文件名[ ,布尔$ use_include_path =虚假[ ,资源$背...2016-11-25
- 下面小编就为大家分享一篇基于make命令与makefile文件详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了SpringBoot 动态配置Profile环境的方式,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-10
- php_ini_loaded_file -检索路径加载php.ini文件,可以通过php_ini_loaded_file函数来实例加载php.ini文件哦。 php_ini_loaded_file ( PHP 5中“ = 5.2.4...2016-11-25
- 原因分析: 任何对.php教程文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在。PHP文件不存在,没办法返回普通的404错误,它返回一个404,并带上一句&rd...2016-11-25
- 这篇文章主要介绍了Yii2使用自带的UploadedFile实现的文件上传的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-06-24