BufferedWriter:
类继承关系:
java.lang.Object
java.io.Writer
java.io.BufferedWriter
该类的构造方法:
BufferedWriter(Writer out);
创建一个使用默认大小输出缓冲区的缓冲字符输出流;
BufferedWrite(Write out, int sz);
创建一个使用给定大小输出缓冲区的新缓冲字符输出流。
字符流写入时候,可以采取直接写入的方式:
首先创建一个字符流对象:
FileWriter fw = new FileWriter("C:\\Demo\\test.txt");
然后对该对象进行写操作:
fw.write("ydhts"); //直接写入
fw.close(); //关闭流对象
这样就能直接把以上数据直接写入到目标文件中去。
以上操作中,如果想对写入的数据进行换行,可以这样处理:
fw.write("ydhaksd\n\rjkaflts");
或者:
private static final String Line_SEPARATOR = System.getProperty("line.separator");
fw.write("asadfgh"+Line_SEPARATOR+"SDFFGG");
以上方法就完成了对流对象中文件的写操作。
但是使用上边的方法将数据写入目的地效率较低,可以使用缓冲区:
先将数据存入缓冲区,再将数据写入目的地:
//创建流对象
FileWriter fw = new FileWriter("C:\\src\\test.txt");
//为了提高写入效率,可以使用字符流的缓冲区。
//创建一个字符写入流的缓冲区对象,并和制定要被缓冲的流对象相关联。
BufferedWriter bw = new BufferedWriter(fw);
//使用缓冲区的写入方法,将字符写入到缓冲区。
bw.write("ydhts");
bw.newLine(); //将写入的数据进行换行
bw.write("ADEJKGHJGFY");
//使用缓冲区的刷新方法将数据写入目的文件。
bw.flush();
//关闭缓冲区。
bw.close();
以上方法可以实现对流对象数据的写入操作。
通过代码可以看到,操作完成后并没有关闭FileWriter的fw对象,但是再次使用该对象对数据进行写入时却提示该对象不存在。
这是因为,缓冲区操作的数据就是该流对象的数据,关闭缓冲区的同时将流对象也关闭了,所以会提示该流对象不存在。
BufferedReader:
类继承关系:
java.lang.Object
java.io.Writer
java.io.BufferedReader
该类具有的构造函数:
BufferedReader(Reader in);
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz);
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
字符流读取时候,可以采取直接读取的方式:
//创建字符流对象:
FileReader fr = new FileReader("C:\\Demo\\test.txt");
然后使用该对象进行字符数据的读取:
//申请缓冲区,一次性读取1024个字符
char[] buf = char[1024];
int num = 0;
//判断,直到读取完毕。
while((num = fr.read(buf) != -1))
{
System.out.println(new String(buf, 0, num));
}
//关闭流对象。
fr.close();
使用以上的方法可以实现对文件的读写,但是这种方法的读写效率太低。
下面使用读取流的缓冲区读取源文件中的数据:
//声明一个读取流对象
FileReader fr = new FileReader("C:\\src\\test.txt");
//声明一个读取缓冲区的对象,并与读取流对象相关联
BufferedReader br = new BufferedReader(fr);
按行读取:
String line1 = br.readLine();
System.out.println(line1);
String line2 = br.readLine();
System.out.println(line2);
String line3 = br.readLine();
System.out.println(line3);
String line4 = br.readLine();
System.out.println(line4);
String line5 = br.readLine();
System.out.println(line5);
String line6 = br.readLine();
System.out.println(line6);
但是以上按行读取方法有一个弊端:
就是如果不知道文档中的数据有多少行时,读取到的数据要么不完整,要么超出数据行数,返回null。
如上面的代码,运行之后,输出数据的同时,最后一个输出语句返回null。
所以可以这样:设置一个判断语句,当读取到的文档的末尾时停止读取
//声明一个读取流对象
FileReader fr = new FileReader("C:\\src\\test.txt");
//声明一个读取缓冲区的对象,并与读取流对象相关联
BufferedReader br = new BufferedReader(fr);
char[] buf = new char[1024];
int len = 0;
while((len = br.read(buf)) != -1)
{
System.out.println(new String(buf, 0, len));
}
br.close();
或者:设置如果读取数据为null,停止读取:
String line = null;
while((line = br.readLine()) != null)
{
System.out.println(line);
}
这样就能完整地读取到源数据文件中的所有字符了。