流的操作规律:
1.明确流和目的。
数据源(源头):就是需要读取,可以使用两个体系:InputStream、Reader
数据汇(目的地):就是需要写入,可以使用两个体系:OutputStream.Writer
2.操作的数据是否是纯文本数据?
如果是(读取/写入的是字符):
数据源:Reader
数据汇:Writer
如果不是(读取/写入的是字节):
数据源:InputStream
数据汇:OutputStream
3.确定了一个体系,明确操作的数据设备
数据源对应的设备,如硬盘(File)、内存(数组)、键盘(System.in)、网络(Socket流)
数据汇对应的设备,如硬盘(File)、内存(数组)、键盘(System.out)、网络(Socket流)
4.需要在基本操作上附加其他功能?比如需要缓冲去提高数据的读写效率,则可以使用装饰类,比如(BufferedReader/BufferedWriter)
凡是操作设备上的文本数据,涉及编码转换,必须使用转换流
package IODemo;
import java.io.BufferedReader;
package IODemo; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; public class InputStreamReaderDemo { /**
* @param args
* @throws IOException
*/ public static void main(String[] args) throws IOException {
/*
* 完成文本文件的三个需求 (明确源和目的)
* 1.输入控制台的内容输出到文本文件中
* 2.将文本文件的内容输出到控制台
* 3.将一个文件的内容复制到另一个文件中
*/
//第三问
BufferedReader bufr = new BufferedReader(new InputStreamReader(
new FileInputStream("Demo.txt")));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("Demo3.txt")));
// 第二问
/*
* BufferedReader bufr = new BufferedReader(new InputStreamReader( new
* FileInputStream("Demo2.txt"))); BufferedWriter bufw = new
* BufferedWriter(new OutputStreamWriter( System.out));
*/
// 第一问
/*
* BufferedReader bufr = new BufferedReader(new InputStreamReader(
* System.in)); BufferedWriter bufw = new BufferedWriter(new
* OutputStreamWriter( new FileOutputStream("Demo2.txt")));
*/
// BufferedReader bufr=new BufferedReader(new
// InputStreamReader(new FileInputStream("Demo.txt"))); /*
* InputStream in = System.in; int ch1=in.read();
* System.out.println(ch1); int ch2=in.read(); System.out.println(ch2);
*/
/*
* InputStreamReader isr = new InputStreamReader(in); BufferedReader
* bufr = new BufferedReader(isr);// 装饰类在基本功能上进行扩展
*/
String line = null;
while ((line = bufr.readLine()) != null) {
if (line.equals("XXXX"))//你可以自定义读取文件时的结束标志 {
break;
}
bufw.write(line);
bufw.newLine();
bufw.flush();
}
} }