JAVA读文件类之FileReader/InputStreamReader/BufferedReader
上一篇写了Java写入文件操作,这一篇回顾一下Java读文件操作。
Java IO采用reader类来进行文件读取,而且已经提供了三个Reader的实现类,FileReader,InputStreamReader和BufferedReader。其中InputStreamReader可以让你在构造器中重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,这让你可以在字节和字符中自由的转换。下面分条讲解三种方式:
①FileReader
用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。
首先看一下构造方法:
FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(FileDescriptor fd)
在给定从中读取数据的 FileDescriptor 情况下创建一个新 FileReader。
FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader
其成员方法主要有:
public void close()
关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。
public int read()
读取单个字符。
读取的字符,如果已到达流的末尾,则返回 -1
public int read(char[] cbuf)
将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
②InputStreamReader
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
构造方法有:
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
成员方法主要有:
void close() 关闭该流并释放与之关联的所有资源。 String getEncoding() 返回此流使用的字符编码的名称。 int read() 读取单个字符。 int read(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分。 boolean ready() 判断此流是否已经准备好用于读取。
③ BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in= new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。
构造方法有:
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
成员方法主要有:
void close() 关闭该流并释放与之关联的所有资源。 void mark(int readAheadLimit) 标记流中的当前位置。 boolean markSupported() 判断此流是否支持 mark() 操作(它一定支持)。 int read() 读取单个字符。 int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。 String readLine() 读取一个文本行。 boolean ready() 判断此流是否已准备好被读取。 void reset() 将流重置到最新的标记。 long skip(long n) 跳过字符。
下面写一些程序进行测试,进一步熟悉上述函数:
①FileReader
public static void main(String[] args) {// TODO Auto-generated method stubFileReader fr=null;try {fr=new FileReader("2.txt");for(int i=0;i<8;i++)//按字符读写System.out.println((char)fr.read());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
② BufferedReader
public static void main(String[] args) {// TODO Auto-generated method stubchar []cbuf=new char[3];BufferedReader br=null; try {br=new BufferedReader(new FileReader("2.txt"));System.out.println(br.readLine());//read by lineSystem.out.println(br.readLine());br.read(cbuf);//read in bufferSystem.out.println(cbuf);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
JAVA读文件类之FileReader/InputStreamReader/BufferedReader相关推荐
- Java读文件写文件操作
这里,Java的读文件和写文件都是基于字符流的,主要用到下面的几个类: 1.FileReader----读取字符流 2.FileWriter----写入字符流 3.BufferedReader---- ...
- java getname_Java文件类字符串getName()方法(带示例)
java getname 文件类字符串getName() (File Class String getName()) This method is available in package java. ...
- java读文件块会读出null,为什么?
java读文件块会读出null,为什么? 可以确定这个块不是最后一块 /*** 从文件中读取一块数据* @param fs* @param seel:第几块* @param vChunkSize:块大 ...
- 用Java读取文件的5种方法-BufferedReader,FileInputStream,文件,扫描仪,RandomAccessFile
There are many different ways to read a file in Java. In this tutorial, we will look into 5 differen ...
- java 读文件 二进制_JAVA中读取文件(二进制,字符)内容的几种方法总结
JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public cla ...
- java文件怎么一行一行读,Java 读文件内容如何显示在一行上
public class FileMessage2 { public static void main(String[] args) throws Exception { File file = ne ...
- java 写文件filewriter_使用FileReader和FileWriter读取写入文件内容
1.Java的輸入与輸出 import java.io.DataInputStream; import java.io.IOException; public class InputAndOutput ...
- java读文件几种方式_JAVA读取文件的几种方式
{ File file1 = new File("/Users/tao/Downloads/酒店id.txt"); // 创建File类对象 FileInputStream fis ...
- java读文件几种方式_java中读取文件的方式有哪几种
java中读取文件的方式有哪几种 发布时间:2020-06-19 13:36:48 来源:亿速云 阅读:135 作者:鸽子 读取文件有多种方式,基于传统的输入流方式或基于nio的Buffer缓冲对象和 ...
最新文章
- git保姆级入门(包含解决git仓库报错500的问题)
- Qt利用avilib实现录屏功能_利用 dogtail 快速进行 GUI 自动化测试
- python是什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...
- softmax ce loss_神经网络中的蒸馏技术,从Softmax开始说起
- 【采用】解读消金业务风控模型的6个层级
- Unity Package Manager Error的解决方案
- Git权威指南-51CTO读书
- Concurrent——Atomic原子操作类
- hdoj 1728 逃离迷宫
- 4. PHP 操作 memcache(1)
- win8计算机修改mac,快捷MAC地址修改器
- PSP2000V3版5.03系统误删PSP文件夹的拯救方案
- 如何优雅地使用 Windows 10 ?
- matlab行星运动轨迹仿真动画,Matlab动画模拟太阳系行星运动
- 拆一台微型计算机步骤,台式微型计算机拆装.doc
- 今日话题:蜗居在大城市的生活
- 计算机专业转ubc绩点,中国留学生申请加拿大名校,如何换算GPA成绩?
- 当 Spring Cloud 遇上 SOFAStack | Meetup#2 回顾
- 深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析
- VSPD+XCOM+Proteus仿真stm32串口通信
热门文章
- javaScript系列笔记 - JS实现MP4播放
- Asterisk Configuration for ARI
- android常用的存储方式,Android 常见数据存储方式
- 5G加速,为什么说紫光股份是运营商市场的大赢家?
- 闪光灯slave是什么意思_在单反相机中使用闪光灯中,什么叫光引闪,什么叫2.4g引闪...
- 判断质数和合数python代码_小学五年级数学《质数和合数》测试题
- semantic-ui基础使用
- 安科瑞预付费管理系统如何在高校学生公寓应用?及现场硬件如何选型?
- 计算机专业新生研讨课资料整合
- 贴几张Google Earth的图