InputStreamReader:是字节流通向字符流的桥梁,它使用指定的
读取字节并将其解码为字符。charset
OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的
将要写入流中的字符编码成字节。charset
当用字节流操作纯文本的时候,为了方便可以使用转换流,或者当涉及到字符集编码转换的时候也可以使用转换流。
分析:将一个中文字符串按照指定编码表写入到一个文件中。
1.操作的是纯文本。要使用字符流更为方便。Writer 。
2.是对文件的操作。想到了 File , 找到 FileWritre。
3.可是FileWriter,使用的是默认编码表:操作系统的编码表(GBk)。不能自定义编码。
4.马上就想到它的父类 OutputStreamWriter 转换流。
5.其实字符流,也是由字节流通过转换流转换过来的。
OutputStreamWriter osw = newOutputStreamWriter(new FileOutputStream("01.txt")); 和
FileWriter fw = newFileWriter("01.txt") 是等价的。
注意:OutputStream是一个抽象类,是不能被实例化的。。。
6.如果要使用高效的缓冲区装饰,那么就要想到BufferedWriter.当然有时候是多余的。。。
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("pan.txt"),"utf-8"));
public class IoTest3 {
//将一个中文字符串按照指定编码表写入到一个文件中。
public static void main(String[] args) throws IOException {
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("pan.txt"),"utf-8"));
bufw.write("我绝对不应该是这样的,我应该更努力...");
bufw.close();
}
}
分析:读取键盘录入信息并写入到,文件中。
1.操作的是纯文本。要使用字符流更为方便。Reader和Writer
2.源设备:键盘。想到 System.in 。是字节流,但操作的是纯文本,所以又想到了转换流:InputStreamReader
3.目的设备:文件--硬盘。想到了FileWriter
4.使用高效装饰一下吧:BufferedReader 和 BufferedWriter 。其实只要是涉及到键盘设备的就要想到 Buffer。因为
Buffer 的 readLine 可以读取一行数据操作更方便。。。
public class IoTest3 {
//将一个中文字符串按照指定编码表写入到一个文件中。
public static void main(String[] args) throws IOException {
//缓冲区,缓冲转换流,转换流操作字节流。。。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//缓冲区,缓冲字符流。
BufferedWriter bufw = new BufferedWriter(new FileWriter("p.txt"));
String line = null;
while((line = bufr.readLine())!=null){
if(line.equals("over"))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
}
分析:读取一个文本文件,写入到控制台上。
1.操作的纯文本数据。使用字符流,Reader 和 Writer
2.源设备:文件--硬盘。 FileReader
3.目的设备:显示器。System.out 。转换一下OutputStreamWriter。
4.高效。。。
public class IoTest3 {
public static void main(String[] args) throws IOException {
BufferedReader bufr = new BufferedReader(new FileReader("p.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line = bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
}
分析:读取键盘录入数据,显示在控制台上。
1.操作的是纯文本。
2.源:键盘 System.in
3.目的:控制台 System.out
4.转换
5.高效
public class IoTest3 {
public static void main(String[] args) throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line = bufr.readLine())!=null){
if(line.equals("over"))
break;
bufw.write(line);
bufw.flush();
}
}
}