int no;
String name; double score; try{
FileInputStream fin=new FileInputStream(\ DataInputStream din=new DataInputStream(fin); int i=0; while(i==0){
no=din.readInt(); name=din.readUTF(); score=din.readDouble();
System.out.println(no+\ }
din.close(); fin.close();
}catch(EOFException e){
System.out.println(\文件结束!\ }
catch(IOException e){
System.out.println(\文件错误!\ } } }
程序分析:
由于一个文件中可能有多条记录,本例使用while循环来读出全部记录,当读到文件尾时,readInt()方法会抛出EOFException异常,所以本例中采用的while循环是一个死循环,当读到文件尾,随着异常的抛出,循环结束。
9.3 字符流类
与InputStream类,OutputStream类相同,Reader类和Writer类也都是基本输入/输出类,也是不能实例化的抽象类,它们为通用的字符流类提供了一些基本方法和标准接口。
字符流类及其子类详见图9-3。
9.3.1 Reader(字符输入流)类和Writer(字符输出流)类
Reader类的常用方法与InputStream类基本相似,Writer类的常用方法与OutputStream类基本相似。它们的主要区别是:InputStream类和OutputStream类操作的是字节,而Reader类和Writer类操作的是字符。
Writer类又特有下列几个方法: Writer append(char c)
将指定字符追加到此 writer。 Writer append(CharSequence csq)
将指定字符序列追加到此 writer。
Writer append(CharSequence csq, int start, int end)
将指定字符序列的子序列追加到此 writer.Appendable。
与InputStream 类的子类相同,Reader类的子类重写了不同功能的read()方法,与OutputStream类的子类相同,Writer类的子类重写了不同功能的write()方法。
9.3.2 字符流类的常用子类及其应用
1.BufferedReader类与InputStreamReader类 BufferedReader类的构造方法 BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。 BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
InputStreamReader类的构造方法 InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。 InputStreamReader(InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。 InputStreamReader(InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。 InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。
BufferedReader类和InputStreamReader类的常用方法都主要继承自Reader类。从BufferReader类的构造方法可看出,其参数只能是Reader类的对象,也就是说BufferReader类只能从Reader对象读数据。
代表标准输入的System.in是一个InputSteam类的对象,所以需要将InputStream类的对象转换成Reader类的对象,这就需要一个转换器。InputStreamReader类是将字节输入流转换成字符输入流的转换器。
为了达到最高效率,可以考虑在 BufferedReader 内包装 InputStreamReader。 【例9-8】 从键盘输入字符,并在屏幕上显示。 import java.io.*;
public class Exam9_8{ void run(){
char input[]=new char[256]; //字符输入缓冲数组。注意类型为char
InputStreamReader strin=new InputStreamReader(System.in); //用键盘输入流对象为参数创建字符输入流对象strin
BufferedReader bufin=new BufferedReader(strin);
//用字符输入流对象strin为参数创建缓冲字符输入流对象bufin try{
System.out.println(\请输入:\ int num=bufin.read(input);
//将从键盘输入的字符放在字符输入缓冲数组input中
System.out.println(\您输入的字节数为:\ String s=new String(input,0,num);
System.out.println(\您输入的字符串为:\ }catch(IOException e){
System.out.println(\错误\ } }
public static void main(String args[]){ Exam9_8 ee=new Exam9_8(); ee.run(); } }
程序分析:
本例是用InputStreamReader对象把键盘输入的字节输入流类型转换为字符输入流,并用缓冲字符输入流来读数据。
2.BufferWriter类与OutputStreamWriter类
BufferWriter类与OutputStreamWriter类都继承自Writer类。BufferWriter类将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。OutputStreamWriter 是字符流通向字节流的桥梁,起到转换器的作用。
BufferWriter类的构造方法: BufferedWriter(Writer out)
创建一个使用默认大小输出缓冲区的缓冲字符输出流。 BufferedWriter(Writer out, int sz)
创建一个使用指定大小输出缓冲区的新缓冲字符输出流。
OutputStreamWriter类的构造方法: OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。 OutputStreamWriter(OutputStream out, Charset cs)
创建使用给定字符集的 OutputStreamWriter。 OutputStreamWriter(OutputStream out, CharsetEncoder enc)
创建使用给定字符集编码器的 OutputStreamWriter。 OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter。 3.PrintWriter(屏幕字符输出流)类
PrintWriter类称作屏幕字符输出流类,用来把字符输出流做为格式化形式在屏幕上输出。此类实现在 PrintStream 中的所有 print 方法。
PrintWriter类提供了打印系统定义的所有基本数据类型的print()方法和println()方法。 4.FileReader类与FileWriter类
前面9.2.2节介绍的FileInputStream类与FileOutputStream类用于字节文件的输入/输出,FileReader类与FileWriter类用于字符文件的输入/输出。
FileReader类是Reader类的子类,FileWriter类是Writer类的子类。 FileReader类的构造方法:
FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。 FileReader(FileDescriptor fd)
在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader。 FileWriter类的构造方法: FileWriter(File file)
在给出 File 对象的情况下构造一个 FileWriter 对象。 FileWriter(File file, boolean append)
在给出 File 对象的情况下构造一个 FileWriter 对象。 FileWriter(FileDescriptor fd)
构造与某个文件描述符相关联的 FileWriter 对象。 FileWriter(String fileName)
在给出文件名的情况下构造一个 FileWriter 对象。 FileWriter(String fileName, boolean append)
在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数
据的 boolean 值。
【例9-9】 将键盘输入的内容存入文件,然后再读出。 import java.io.*;
public class Exam9_9{
public static void main(String args[]) throws IOException{ int n;
byte b[]=new byte[256]; System.out.println(\请输入:\
System.in.read(b); //通过键盘输入内容
String s1=new String(b); //将字节数组转换为字符串 s1=s1.trim(); //给字符串去空格
BufferedWriter bw=new BufferedWriter(new FileWriter(\ bw.write(s1,0,s1.length());
System.out.println(\已存入文件\ bw.close();
BufferedReader br=new BufferedReader(new FileReader(\ String s2=br.readLine();
System.out.println(\你存入到文件中的内容是:\ br.close(); } }
程序分析:
(1)本例中利用System.in()接收键盘输入的数据,存入字节数组b[]中,然后将其转换为字符串。
(2)语句BufferedWriter bw=new BufferedWriter(new FileWriter(\创建了两个对
相关推荐: