字符流缓冲区:BufferedWriter,BufferedReader
来源:互联网 发布:vmware for mac破解版 编辑:程序博客网 时间:2024/05/16 17:36
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);}
这样就能完整地读取到源数据文件中的所有字符了。
- 字符流缓冲区:BufferedWriter,BufferedReader
- IO流--字符流缓冲区(BufferedReader,BufferedWriter)
- Java - 字符流缓冲区 - BufferedReader - BufferedWriter
- 黑马程序员---IO流(字符流缓冲区BufferedWriter、BufferedReader)
- Java_io体系之BufferedReader、BufferedWriter字符流缓冲区
- 字符流缓冲区的使用之BufferedWriter和BufferedReader
- 12-IO流(字符流-缓冲区-BufferedWriter)12 13-IO流(字符流-缓冲区-BufferedReader)12
- 缓冲字符流BufferedReader/BufferedWriter
- IO流-2.【字符流缓冲区BufferedWriter/BufferedReader】【readLine()方法】【装饰设计模式】【LineNumberReader】
- java IO字符流 缓冲区类BufferedWriter与BufferedReader的用法
- 字符缓冲流(BufferedReader 和 BufferedWriter)
- 字符输入流BufferedReader和字符输出流BufferedWriter
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
- BufferedWriter 和 BufferedReader 为带有默认缓冲的字符输出输入流,因为有缓冲区所以很效率比没有缓冲区的很高。
- Java IO 之 BufferedReader BufferedWriter 通过缓冲区实现字符文本文件的复制
- 高级流BufferedReader;.BufferedWriter;
- JAVA IO缓冲区(BufferedWriter 和 BufferedReader)
- 黑马程序员 字符流 BufferedWriter 和 BufferedReader 的个人理解
- hdu 1115 多边形重心
- C语言文件操作函数大全
- Ural 1654. Cipher Message
- 结合Github使用git管理代码的简便方法
- Android视角,精妙绝伦的回调方法
- 字符流缓冲区:BufferedWriter,BufferedReader
- dfs小结
- TCP/Socket学习--UDP段格式
- UVA10361- Automatic Poetry
- E: Sub-process /usr/bin/dpkg returned an error code 问题的解决办法
- 保障质量的工具
- windows下利用putty连接Amazon EC2实例
- C文件操作
- jdk7下httpclient请求https问题