13 文本I/O流
目录
13.2.3 FileReader类和FileWriter类
13.2.3 BufferedReader类和BufferedWriter类
13.2.1 引入
应用场景:二进制输入输出流是以字节为信息的基本单位,而文本I/O流(也叫字符I/O流)则是以字符为信息的基本单位。
文本I/O流的类层次结构如图13.2-1以及13.2-2所示
Reader类由BufferedReader,InputStreamReader,StringReader继承,而FileReader继承了InputStreamReader
Writer类由BufferedWriter,Out
图13.2-1 Reader及常用子类
图13.2-1 Writer及常用子类
13.2.2 Reader和Writer类
抽象类Reader类和Writer类分别是文本输入流和文本输出流的根类,它们实现字符的读写
Reader类是文本输入流的根类,定义的方法有:
1.public int read():读取一个字符,返回0~65535的int型值,如果到达流的末尾返回-1
2.public int read(char [] cString):读取多个字符到字符数组cString中,如果到达流的末尾返回-1
3.public void close():关闭输入流
Writer类是字 符输入流的根类,定义的方法有:
1.public void write(int c):向输出流中写一个字符,实际是将int型的c的低16位写入输出流
2.public void write(char [] cString):把字符数组cString中的字符写入输出流
3.public void write(String str):把字符串str写入输出流
4.public void flush():刷新输出流
刷新输出流是指将输出缓冲中区中的数据立即发送到输出目标,并清空缓冲区的过程。当我们使用输出流将数据写入文件或网络时,数据通常会被缓冲中到一个缓冲区中,直到缓冲区被填满或被显示地刷新。刷新输出流可以确保数据立即发送到目标,而不需要等待缓冲区被填满或程序执行完毕。
5.public void close():关闭输出流
注:Reader类和Writer类的方法在发生I/O错误时都会抛出IOException异常,因此在程序中应该捕获异常或声明抛出异常。
13.2.3 FileReader类和FileWriter类
FileReader类是文件输入流,FileWriter是文件输出流。如果需要操作文本数据时,优先使用这两个类。
FileReader类的构造方法有:
1.public FileReader(String fileName):用字符串表示的文件构造一个文件输入流对象
2.public FileReader(File file):用File对象表示的文件构造一个文件输入流对象
FileWriter类的构造方法有:
1.public FileWriter(String fileName):用参数fileName指定的文件创建一个文本输出流对象
2.public FileWriter(File file):用参数file指定的File对象创建一个文本输出流对象
3.public FileWriter(String fileName,boolean append):使用该构造方法创建文件输出流的对象时,
如果参数appent指定为true,则可以向文件末尾追加数据,否则覆盖文件原本的数据
注意:FileReader是InputStreamReader的子类,实现二进制输入流向文本输入流的转换,FileWriter类是OutputStreamWriter的子类,实现文本输出流向二进制输出流的转换
13.2.3 BufferedReader类和BufferedWriter类
BufferedReader和BufferedWriter分别实现了具有缓冲功能的字符输入输出流。这两个类用来将其他的字符流包装成缓冲字符流,以提高读写数据的效率
BufferedReader类的构造方法如下:
1.public BufferedReader(Read in):使用默认的缓冲区大小创建缓冲字符输入流
2.public BufferedReader(Reader in,int sz):使用指定的缓冲区大小创建缓冲字符输入流
使用以下代码可以创建一个BufferedReader对象:
BufferedReader in =new BufferedReader(new FileReader("input.txt"));
BufferedReader类除覆盖父类Reader的方法外,还有一个常用方法:
public String readLine():从输入流中读取一行文本
BufferedWriter类的构造方法如下:
BufferedWriter(Write out):使用默认的缓冲区大小创建缓冲字符输出流
BufferedWriter(Writer out,int sz):使用指定的缓冲区大小创建缓冲字符输出流
除继承Writer类的方法外,该类提供了一个void newLine()方法
用来写一个行分隔符,它是系统属性line.separator定义的分隔符。通常Writer直接将输出发送到基本的字符或字节流,建议在Writer上(如FileWriter和OutputStreamWriter)包装BufferedWriter,例如;
BufferedWriter br=new BufferedWriter(new FileWriter("output.txt"));
13.2.4 PrintWriter类
PrintWriter类实现字符打印输出流.它的构造方法如下:
PrintWriter(Writer out):使用参数指定的输出流对象out创建一个打印输出流
PrintWriter(Writer out,boolean autoFlush):如果autoFlush指定为true,则在输出之前自动刷新输出流
PrintWriter(OutputStream out):使用二进制输出流创建一个打印输出流
PrintWriter(OutputStream out):如果autoFlush指定为true,则在输出之前自动刷新输出流
PrintWriter类定义的常用方法如下;
1.Public void println(boolean b):输出一个boolean型数据
2.Public void println(char c):输出一个char型数据
3.Public void println(char s[]):输出一个char型数组数据
4.Public void println(int i):输出一个int型数据
5.Public void println(long l):输出一个long型数据
6.Public void println(float f):输出一个float型数据
7.Public void println(double d):输出一个double型数据
8.Public void println(String s):输出一个String型数据
9.Public void println(Object obj):将obj转换成String型数据,然后输出
10.Public PrintWriter printf(String format,Object...args):使用指定的格式format,输出args参数指定的数据
以上方法都是把数据转换成字符串,然后输出。当把对象传递给这两个方法时则先调用对象的toString()方法将对象转换成字符串,然后输出。
13.2.5 使用Scanner对象
使用Scanner类从键盘读取数据,再创建Scanner对象时将标准输入设备System.in的作为其构造方法的参数。使用Scanner还可以关联文本文件,从文本文件中读取数据
Scanner类的常用构造方法如下:
1.public byte nextByte():读取下一个标记并将其解析成byte型数
2.public short nextShort():读取下一个标记并将其解析成short型数
3.public int nextInt():读取下一个标记并将其解析成int型数
4.public long nextLong():读取下一个标记并将其解析成long型数
5.public float nextFloat():读取下一个标记并将其解析成float型数
6.public double nextDoubleI():读取下一个标记并将其解析成double型数
7.public boolean nextBoolean():读取下一个标记并将其解析成boolean型数
8.public String next():读取下一个标记并将其解析成字符串
9.public String nextLine():读取当前行作为一个String字符串
10.public Scanner useDelimiter(String pattern):设置Scanner对象并使用分隔符的模式。pattern为一个合法的正则表达式
public void close():关闭Scanner对象
对上述每个nextXxx()方法,Scanner类还提供一个hasNextXxx()方法,使用该方法可以判断是否还有下一个标记。