最近学习到了IO流这块,下面我就把视频有关讲解IO流选取的规则在这里总结一下,以防以后忘记。
字节流:
读入:InputStream FileInputStream BufferedInputStream System. in
写入:OutputStream FileOutputStream BufferedOutputStream System.out
字符流:
读入:Reader FileReader BufferedReader
写入:Writer FileWriter BufferedWriter
转换流:
InputStreamReader 字节到字符的桥梁,解码
OutputStreamWriter 字符到字节的桥梁,编码
流的操作规律:
因为有时候,我们在开发的工程中,会遇到各种各样的流对象,那怎样选取真确的流对象呢?
以下有四个明确:
1,明确源和目的:
源: InputStream Reader
目的: OutputStream Writer
2,是否为纯文本:
源:
是:Reader 否:InputStream
目的:
是:Writer 否:OutputStream
到这里,就可以明确需求中具体要使用哪个体系。
3,明确设备
源:
硬盘:File
控制台:System. in
内存:数组
网络:Socket流
目的:
硬盘:File
控制台:System. out
内存:数组
网络:Socket流
4,是否需要额外功能:
1,需要高效就加上Buffer
2,转换
以下便是几个例子用来进行说明:
========================================================================
①复制文件
1,明确源和目的:
源: InputStream Reader
目的: OutputStream Writer
2,是否为纯文本:
是:
源:Reader
目的:Writer
否:
源:InputStream
目的:OutputStream
3,明确设备:
源: 硬盘 File
目的: 硬盘 File
纯文本:
FileReader fr = new FileReader("xxx.text");
FileWriter fw = new FileWriter("xxx.text");
不是纯文本:
FileInputStream fis = new FileInputStream("xxx.text");
FileOutputStream fos = new FileOutputStream("xxx.text");
4,是否需要额外功能:
需要高效;
纯文本:
BufferedReader bufr = new BufferedReader(new FileReader("xxx.text"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("xxx.text"));
不是纯文本:
BufferedInputStream bufi = new BufferedInputStream(new FileInputStream("xxx.text"));
BufferedOutputStream bufo = new BufferedOutputStream(new FileOutputStream("xxx.text"));
========================================================================
②读取键盘录入信息,并将其保存在纯文本中
1,明确源和目的:
源: InputStream Reader
目的: OutputStream Writer
2,是否为纯文本:
是:
源:Reader
目的:Writer
3,明确设备:
源:控制台 System. in
目的:硬盘 File
InputStream in = System. in;
FileWriter fw = new FileWriter("xxx.text");
这样做比较麻烦,于是我们将字节流,转换字符流去,操作将会非常方便。
4,需要额外功能:
需要,需要将读入的字节流转换为字符流去操作,这样会比较方便,所以我们需要使用转换流。
InputStreamReader isr = new InputStreamReader(System. in);
需要,高效吗?需要。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System. in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("xxx.text"));
========================================================================
③将纯文本信息,展示在控制台上
1,明确源和目的:
源: InputStream Reader
目的: OutputStream Writer
2,是否为纯文本:
是:
源:Reader
目的:Writer
3,明确设备:
源:硬盘 File
目的:控制台 System.out
FileReader fr = new FileReader("xxx.text");
OutputStream out = System.out;
4,需要额外功能:
需要转换:
OutputStreamWriter osw = new OutputStreamWriter(System.out);
需要高效:
BufferedReader bufr = new BufferedReader(new FileReader("xxx.text"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
====================================================================
④读取键盘录入数据,并将其显示在控制台上
1,明确源和目的:
源: InputStream Reader
目的:OutputStream Writer
2,是否为纯文本:
是:
源:Reader
目的:Writer
3,明确设备:
源:控制台 System. in
目的:控制台 System.out
InputStream in = System. in;
OutputStream out = System.out;
4,需要额外功能:
需要转换:
InputStreamReader isr = new InputStreamReader(System. in));
OutputStreamWriter isw = new OutputStreamWriter(System.out));
需要高效:
BufferedReader bufr = new BufferedReader(new InputStreamReader(System. in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
====================================================================
⑤根据键盘录入一个中文字符串数据按照指定的编码表写入到一个文本文件中
1,明确源和目的:
源: InputStream Reader
目的:OutputStream Writer
2,是否为纯文本:
是:
源:Reader
目的:Writer
3,明确设备:
源:控制台 System. in
目的:硬盘 File
InputStream in = System. in;
FileWriter fw = new FileWriter("xxx.text");
4,需要额外功能:
需要,转换,因为在要求里面已经,指出需要按照指定的编码表写入到一个文本文件中,所以我们需要使用到转换流,而上面的FileWriter fw = new FileWriter(“xxx.text”);的这种使用方法也是错误的,因为它会默认本地编码表。
//charsetName表示的是什么类型的编码表。
InputStreamReader isr = new InputStreamReader(System. in));
OutputStreamWriter osw =
new OutputStreamWriter(new FileOutputStream("xxx.text"),charsetName);
需要高效,
BufferedReader bufr = new BufferedReader(new InputStreamReader(System. in));
BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("xxx.text"),charsetName);
完整代码:
package cxf.java.p2.transstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class TransStreamDemo4 {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
one();
two();//输出结果是:浣犲ソ涓浗
}
public static void one() throws UnsupportedEncodingException, FileNotFoundException, IOException {
String changeName = "UTF-8";
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("cxf.text"),changeName));
String contents = "你好中国";
bufw.write(contents);
bufw.close();
}
public static void two() throws FileNotFoundException, IOException {
BufferedReader bufr = new BufferedReader(new FileReader("cxf.text"));
//默认本地编码表
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
line = bufr.readLine();
bufw.write(line);
bufr.close();
bufw.close();
}
}