知识点:使用Reader和writer流类
字符输入输出流
Reader
和Writer
是用来处理文本文件的。其作用是建立一条通往文本文件的通道,在实现读写操作时,由于两者均为抽象类,所以要先使用它们的子类来创建对象,再利用其对象调用读方法和写方法实现读写操作。本文使用的流类构造方法和常用方法参考Java API。
流类InputStreamReader
是Reader
类的子类,而文件字符输入流FileReader
继承自InputStreamReader。所以两者创建的对象都可供FileReader类的实例化对象使用。在实现字符文件的输入操作时,必须先创建FileReader类的实例化对象,然后在调用reade()
方法。
构造方法public FileReader(String name)
,根据文件名创建一个可读取的输入流对象。例:
//利用FileReader类读取f:\java文件夹下的hello.txt文件
//filename:A_1.java
import java.io.*;
public class A_1{
public static void main(String[] args)throws IOException{
char[] ch=new char[20];
//创建一个字符数组,Java中汉字和字母都是一个字符,转义字符占用两个字符
FileReader fr=new FileReader("f:\\java\\hello.txt");
int num=fr.read(ch);
String str=new String(ch,0,num);
System.out.print("读取的字符个数:"+num+",内容是:");
System.out.println(str);
fr.close();
}
}
//读取的字符个数:11,内容是:Helloworld!
流类OutputStreamWriter
是Writer
类的子类,而文件字符流输出对象FileWriter
继承自OutputStreamWriter,所以两者创建的对象都可供FileWriter类的实例化对象使用。在实现字符文件的输出操作时,必须先创建FileWriter类的实例化对象,然后在调用write()
方法。
构造方法:public FileWriter(String filename)
,根据所给的文件名创建一个文件输出流对象,原先的文件会被覆盖。public FileWriter(String filename,boolean a)
,如果a=true,则会将数据追加在源文件的后面。例:
//利用FielWriter类将字符数组追加到原文件末尾
import java.io.*;
public class A_1{
public static void main(String[] args)throws IOException{
FileWriter fw=new FileWriter("f:\\java\\hello.txt",true);
char[] ch={'J','a','v','a','\n'};
fw.write(ch);
fw.close();
}
}
//helloworld!Java
缓冲字符输入流BuffedReader
是Reader
类的子类,用来读取缓冲区的数据,使用前必须先创建文件字符输入流FileReader类对象,然后以该对象为参数创建BufferedReader类的对象,利用此对象来读取缓冲区数据。
构造方法:public BuffedReader(Reader in)
,创建缓冲区字符输入流。public BufferedReader(Reader in,int size)
,创建缓冲区字符输入流,并设置缓冲区大小。例:
//利用缓冲字符输入流类读取文本文件
import java.io.*;
public class A_1{
public static void main(String[] args){
int count=0;
String thisLine;
try{
FileReader fr=new FileReader("F:\\java\\hello.txt");
BufferedReader br=new BufferedReader(fr);
while((thisLine=br.readLine())!=null){
count++;
System.out.println(thisLine);
}
System.out.println("一共"+count+"行");
br.close();
}
catch(IOException e){}
}
}
/**
helloworld!
helloworld!
一共2行
*/
缓冲字符输出流BuffedWriter
是Writer
类的子类,用来将数据写入缓冲区,使用前必须先创建文件字符输出流FileWriter类对象,然后以该对象为参数创建BufferedWriter类的对象,利用此对象把数据写入缓冲区。与BufferedReader类不同的是缓冲区数据最后必须使用flush()方法将缓冲区数据全部写入文件内。
构造方法:public BufferedWriter(Writer out)
,创建缓冲区字符输出流。public BufferedWriter(Writer out,int size)
,创建缓冲区字符输出流,并设置缓冲区大小。例:
//利用缓冲区输入输出流进行文件赋值
import java.io.*;
public class A_1{
public static void main(String[] args){
String str=new String();
try{
BufferedReader in=new BufferedReader(new FileReader("F:\\java\\hello.txt"));
BufferedWriter out=new BufferedWriter(new FileWriter("F:\\java\\hello.txt"));
while((str=in.readLine())!=null){
System.out.println(str);
out.write(str);
out.newLine();
}
out.flush();
in.close();
out.close();
}
catch(IOException ioe){}
}
}
总结:Java语言提供了丰富的流类,完成基本的输入输出以及文件操作,熟练掌握输入输出流以及文件操作可以实现程序与外部设备或者其他程序的交互,大大提高开发的效率。