----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
IO流 BufferedWriter
字符流的缓冲区:
提高了对数据的读写效率
对应类:
BufferedWriter
BufferedReader
缓冲区要结合流才可以使用
在流的基础上对流的功能进行了增强
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须要有流对象。
FileWriter fw=new FileWriter(“buf.txt”)
//为提高字符写入流的效率,加入了缓冲技术
(其实就是封装了数组)
BufferedWriter bufw = new BufferedWriter(fw);
只要将需要提高效率的流对象作为参数传递给缓冲区的构造函数即可。
bufw.write("abcde");
//记住:只要用到缓冲区,就要刷新
bufw.flush();
bufw.close();
其实关闭缓冲区,就是在关闭缓冲区中的流对象,所以不用fw.close();
bufw.newLine();
//win和lin都是换行
for()
{
...
bufw.flush();
//写一次刷一次,要不停电就费了
}
IO流 BufferedReader
FileReader fr=new FileReader("buf.txt");
BufferedReader bufr=new BufferedReader(fr);
String s1=bufr.readLine();
bufr.close();
String line=null;
while((line=bufr.readLine())!=null)
{
System.out.println(line);
}
一次读一行,方便对文本数据的获取,返回null时到文件末尾
BufferedReader bufr=null;
BufferedWriter bufw=null;
try
{
bufr=new BufferedReader(new FileReader("BufferedWriterDemo.java"));
bufw=new BufferedWriter(new FileWriter("bufWriter_Copy.txt"));
String line=null;
while((line=bufr.readLine())!=null)
{
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch(IOException e)
{
throw new RuntimeException("读写失败");
}
finally
{
try{if(bufr!=null)bufr.close();}
catch(IOException e)
{throw new RuntimeException("读取关闭失败");}
try{if(bufw!=null)bufw.close();}
catch(IOException e)
{throw new RuntimeException("写入关闭失败");}
}
readLine();返回时不包括行终止符
IO readLine原理,先存起来,遇到回车符,再全返回来,比read方法要高效很多。无论是读一行,获取读取多个字符。其实最终都是在硬盘上一个一个读取。所以最终使用的还是read方法,一次读一个的方法。
自己做一个readLine方法:
MyBufferedReader
自定义读取一行
/*
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。
当返回null时,表示读到文件末尾。
readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。
*/
import java.io.*;
/*
明白了BufferedReader类中特有方法readLine的原理后,
可以自定义一个类中包含一个功能和readLine一致的方法。
来模拟一下BufferedReader
*/
import java.io.*;
class MyBufferedReader extends Reader
{
private Reader r;
MyBufferedReader(Reader r)
{
this.r = r;
}
//可以一次读一行数据的方法。
public String myReadLine()throws IOException
{
//定义一个临时容器。原BufferReader封装的是字符数组。
//为了演示方便。定义一个StringBuilder容器。因为最终还是要将数据变成字符串。
StringBuilder sb = new StringBuilder();
int ch = 0;
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
/*
覆盖Reader类中的抽象方法。
*/
public int read(char[] cbuf, int off, int len) throws IOException
{
return r.read(cbuf,off,len) ;
}
public void close()throws IOException
{
r.close();
}
public void myClose()throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("buf.txt");
MyBufferedReader myBuf = new MyBufferedReader(fr);
String line = null;
while((line=myBuf.myReadLine())!=null)
{
System.out.println(line);
}
myBuf.myClose();
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------