这两个类是高效率的提升文件的读取速度,它们为字符输入和输出提供了一个缓冲区,能够显著的调高写入和读取的速度,特别针对大量的磁盘文件读取的时候,下面着重的讲讲这两个类html
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取,要特别注意的是这个市针对字符流而不是字节流。java
一般,
Reader
所做的每一个读取请求都会致使对底层字符或字节流进行相应的读取请求。所以,建议用BufferedReader
包装全部其read()
操做可能开销很高的Reader
(如FileReader
和InputStreamReader
)数组
BufferedReader(Reader in)
建立一个使用默认大小输入缓冲区的缓冲字符输入流。函数
BufferedReader(Reader in, int sz)
建立一个使用指定大小输入缓冲区的缓冲字符输入流。学习
能够看出构造函数使用了Reader这个抽象类来初始化,咱们前面说过这个是针对字符流的读取,所以可使用
Reader
类的两个子类FileReader
,InputStreamReader
来初始化操作系统
File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt"); BufferedReader bufferedReader=new BufferedReader(new FileReader(file)); //使用FileReader实例化 //使用InputStreamReader来实例化 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
close()
code
String readLine()
读取一行的数据htm
int read()
读取一个字符,注意这里的和字节的不同,这里的汉字占用了一个字节,前面讲到读取字节流的时候使用byte读取汉字占用三个字节blog
skip(int n)
跳过n个字节ip
ready()
判断此流是否已准备好被读取。
用于控制台的读取,前面已经说过
System.in
返回的是InputStream
类型的,所以可使用InputStreamReader
实例化,固然这个有点多余了,咱们彻底可使用java.util
提供的Scanner
直接进行输入
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in)); String str=bufferedReader.readLine(); //将控制台输入的字符串读取 System.out.println(str); //打印出来
用于文件的读取
BufferedReader bufferedReader=new BufferedReader(new FileReader(file)); // BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(file))); // bufferedReader.skip(2); //跳过两个字节 // // 第一种读取的方式 while(bufferedReader.ready()) //判断是否还有字符 { String str=bufferedReader.readLine(); //直接读取一行 System.out.println(str); } bufferedReader.close(); //第二种读取方式 int len=bufferedReader.read(); while(len!=-1) //判断是否读到文件的末尾 { System.out.print((char)len); //强制转化成字符 len=bufferedReader.read(); }
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
一般
Writer
将其输出当即发送到底层字符或字节流。除非要求提示输出,不然建议用 BufferedWriter 包装全部其 write() 操做可能开销很高的 Writer(如FileWriters
和OutputStreamWriters
)。例如
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
BufferedWriter(Writer out)
建立一个使用默认大小输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz)
建立一个使用给定大小输出缓冲区的新缓冲字符输出流。
File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt"); BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file));
注意这里的FileWriter是Writer的子类,所以可使用其实例化
close()
flush()
newLine()
写入一个与平台相关的换行符
write(int data)
写入一个字符,这里的写入的不是整数
write(String str)
写入一个字符串
write(String str,int off,int len)
写入部分字符串
write(char[] c)
write(char[] c,int off,int len)
File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt"); File file1=new File("/tmp"+File.separator+"test"); File file2=new File("/tmp"+File.separator+"test"+File.separator+"demo.txt"); if(!file1.exists()) { file1.mkdir(); System.out.println("文件夹建立成功"); } BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file)); String str="陈加兵"; int data=48; String name="chenjiabing"; char[] chars=name.toCharArray(); bufferedWriter.write(str); //写入一个字符串,固然也能够截取这个字符串的某一段 bufferedWriter.newLine(); //写入一个平台自带的换行符,由于每个操做系统的换行符都不同 bufferedWriter.write(data); //写入的并非整数,而是这个整数所表明的字符 bufferedWriter.newLine(); bufferedWriter.write(chars,1,4); //写入字符数组 bufferedWriter.flush(); bufferedWriter.close()
拓展:经过了上面的学习,你不以为使用这个类写入文件数据有点烦了,只能写入
String
char
类型的数据,此时咱们就想到了前面说过的打印流(PrintWriter
),这是一个便捷的写入文件的类,能够指定任意格式任意类型的数据,一样是输出流,我么能够将他们结合起来,构成一个更增强大的输出流,以下:
File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt"); //用BufferedWriter实例化PrintWriter,显著提升写入的效率 PrintWriter printWriter=new PrintWriter(new BufferedWriter(new FileWriter(file))); String name="陈加兵"; int age=22; float grade=99.9f; printWriter.printf("姓名:%s,年龄:%s,grade:%s",name,age,grade); //格式化的写入 printWriter.close();
将一个文件中数据转移到另一个文件中
package IO; import java.io.*; /** * Created by chenjiabing on 17-5-26. */ public class demo13 { /** * 经常使用函数: * newLine() * write(String str) * write(String str,int off,int len) * write(Char[] c) * write(Char[] c,int off,int len) * write(int data) * close() * flush() */ public static void main(String[] args) throws IOException { File file = new File("/tmp" + File.separator + "test" + File.separator + "test.txt"); File file1 = new File("/tmp" + File.separator + "test"); File file2 = new File("/tmp" + File.separator + "test" + File.separator + "demo.txt"); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file2)); BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); while (bufferedReader.ready()) { String str = bufferedReader.readLine(); //读取文件test.txt中的一行数据 bufferedWriter.write(str); //将这一行数据写入文件demo.txt bufferedWriter.newLine(); } bufferedReader.close(); bufferedWriter.flush(); bufferedWriter.close(); } }