import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class BufferedCopy { public static void main(String[] args)throws IOException { //创建BufferedReader一样,必须先有流。 FileReader fr = new FileReader("tempfile\\buf.txt"); BufferedReader bufr = new BufferedReader(fr); //创建一个字符写入流的缓冲区。应该先创建流。 FileWriter fw = new FileWriter("tempfile\\buf2.txt"); BufferedWriter bufw = new BufferedWriter(fw); String line = null; while((line=bufr.readLine())!=null){ bufw.write(line);// 换行 bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); }}需求2:读取键盘录入信息,并写入到文本文件中 a.明确源和目的 源:InputStream Reader 目的: OutputStream Writer b.是否是纯文本 是,源:Reader 目的:Writer c.明确具体设备 源:键盘 System.in 目的:硬盘 File InputStream in = System.in;//字节流,使用InputStreamReader FileWriter fw = new FileWriter("b.txt"); 这样做可以完成,但是麻烦,将读取的字节数据转成字符串,再由字符流操作 d.需要额外功能 转换.将字节流围成字符流,因为明确的源是Reader,这样操作方便数据时,便捷.所以要将已有的字节流转成字符流.使用字节-->字符 使用InputStreamReader InputStreamReader isr = new InputStreamReader(System.in); FileWriter fw = new FileWriter("b.txt"); 需要,高效, BufferedReader buff = new BufferedReader(isr);
BufferedWriter bufw = new BufferedWriter(fw);
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;public class ReadKeyDemo { public static void main(String[] args) throws IOException { BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//记住:以后读取键盘都用这句,可以背下来。 BufferedWriter bufw = new BufferedWriter(new FileWriter("d:/a.txt")); String line = null; while((line=bufr.readLine())!=null){ //如果输入over,程序结束 if("over".equals(line)) { break; } bufw.write(line);// 换行 bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); }}需求3:将一个文件文件内容显示在控制台上 a.明确源和目的 源:InputStream Reader 目的: OutputStream Writer b.是否是纯文本 是, 源:Reader 目的:Writer c.明确具体设备 源:硬盘:File 目的:控制台:System.out FileReader fr = new FileReader("a.txt"); OutputStream out = System.out;//这样输出内容很麻烦,使用转换流 d.需要额外功能吗? 需要: 转换流 FileReader fr = new new FileReader("a.txt"); OutputStreamWriter osw = new OutputStreamWriter(System.out); 高效,buffer BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.IOException;import java.io.OutputStreamWriter;public class ReadKeyDemo { public static void main(String[] args) throws IOException { BufferedReader bufr = new BufferedReader(new FileReader("d:/a.txt")); BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; while((line=bufr.readLine())!=null){ bufw.write(line);// 换行 bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); }}需求4:读取键盘录入数据,显示在控制台上 a.明确源和目的 源:InputStream Reader 目的: OutputStream Writer b.是否是纯文本 是, 源:Reader 目的:Writer c.明确具体设备 源:键盘:System.in 目的:控制台:System.out InputStream in = System.in; OutputStream out = System.out; d.明确额外功能? 需要转换,因为都是字节流,但是操作的却是文本数据 所以使用字符流操作起来更为便捷 InputStreamReader isr = new InputStreamReader(System.in); OutputStreamWriter osw = new OutputStreamWriter(System.out); 为了将其高效 BufferedReader bufr = new BufferedReader(isr); BufferedWriter bufw = new BufferedWriter(osw);
/**录入键盘输入字母并将小写变为大写*/import java.io.*;class readin { public static void main(String[] args)throws IOException { InputStream in = System.in;//引入输入流 InputStreamReader isr = new InputStreamReader(in); StringBuilder sb = new StringBuilder();//新建一个缓冲区 while(true) { int ch = in.read();//读入键盘输入 if(ch=='\r') continue; if(ch=='\n') { String s = sb.toString();//讲读入输入转换为字符型 if("over".equals(s))//判断S是否为OVER break; else System.out.println(s.toUpperCase());//打印出字母大写 sb.delete(0,sb.length()); } else sb.append((char)ch); } }}什么时候使用转换流呢? 1.源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷. 2.一旦操作文本涉及到具体的指定编码表时,必须使用转换流