可以把BufferedReader和BufferedWriter称为上层流,把它们指向的字符流(Reader,Writer)称为底层流。
Java采用缓存技术将上层流和底层流连接。
底层字符输入流先将数据读入缓存,BufferedReader再从缓存读取数据;BufferedWriter流将数据写入缓存,底层字符输出流会不断地将缓存中的数据写入到目的地。
当BufferedWriter流调用flush()刷新缓存或调用close()方法关闭时,即使缓存没有溢出,底层流也会立刻将缓存的内容写入目的地。
other.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@page import="java.io.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'other.jsp' starting page</title> </head> <body> <% File file=new File("C:\Users\X550V\Desktop","aa.txt"); File file1=new File("C:\Users\X550V\Desktop","cc.txt"); if(!file.exists()||!file1.exists()){ file.createNewFile(); file1.createNewFile(); out.print("创建文件成功<br>"); //往文件里写入一些数据先 String str="Hello World:"+" "+"My World:";//rn表示换行 char c[]=str.toCharArray(); Writer o=new FileWriter(file); o.write(c); o.close(); } try{ Reader in=new FileReader(file); BufferedReader bufferRead=new BufferedReader(in); Writer ou=new FileWriter(file1); BufferedWriter bufferWritr=new BufferedWriter(ou); String str=null; while((str=bufferRead.readLine())!=null){//读取一行的数据不为空时 //第一个参数就是要分隔的String,第二个是分隔字符集合, //第三个参数表示分隔符号是否作为标记返回,如果不指定分隔字符,默认的是:”tnrf” StringTokenizer fenxi=new StringTokenizer(str); int count=fenxi.countTokens();//返回nextToken方法被调用的次数 str=str+"句子中单词个数:"+count; bufferWritr.write(str); bufferWritr.newLine();//换行 } bufferWritr.close(); ou.close(); //将cc.txt的内容显示出来 in=new FileReader(file1); bufferRead=new BufferedReader(in); String info=null; out.print(file1.getName()+"内容:<br>"); while((info=bufferRead.readLine())!=null){ out.print(info+"<br>"); } bufferRead.close(); in.close(); } catch(IOException e){ out.print(e); } %> </body> </html>