import java.io.*;
/*流操作的基本规律
最痛苦的就是流对象有很多,不知道该用哪一个。
通过明确三个来完成。
1*.明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2*.操作的数据是否是纯文本。
操作的数据是纯文本:字符流
操作的数据不是纯文本:字节流
3.当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分。
源设备包括:内存,硬盘,键盘。
目的设备:内存,硬盘(文件),控制台
通过以下练习来巩固:
1.将一个文本件数据存储到另一个文件中。(即复制文件)
源:因为是源所以使用读取流 :InputStream或Reader.
是不是操作文本文件:是!这时选择Reader。
这样体系就明确了。
接下来明确对象,明确要使用体系中的哪个对象。
明确设备:硬盘上的一个文件。
Reader体系中可以操作文件的对象是FileReader
是否需要提高效率:是!加入Reader体系中的缓冲区 BufferedReader
FileReader fr=new FileReader("a.txt");
BufferedReader br=new BufferedReader(fr) ------>写成一句的话可以这么写:BufferedReader br=new BuffereReader(new FileReader("a.txt"));
目的:OutputStream , Writer
目的是否是纯文本的? 是。Writer.
明确设备:硬盘,一个文件。
Writer体系中可以操作文件对象的是FileWriter.
FileWriter fw=new FileWriter("b.txt");
BufferedWiter bw=new BufferdWriter(fw);
----------------------------------------------------
1.将一个图片文件数据存储到另一个文件中,按照以上三个格式:(自己做的)
源:因为是源所以使用读取流 :InputStream或Reader.
是不是操作文本文件:不是!这时选择InputStream.
这样体系就明确了。
接下来明确对象,是硬盘上的一个文件,对象即:FileInputStream
-------------------------------------------------------------------------
2.需求:将键盘录入的数据保存到一个文件中。
这个需求中 有源和目的分别都存在。
源:InputStream 和Reader
是不是纯文本。是! 选择Reader。
设备:键盘。对应的的对象即 System.in
不是选择Reader吗? System.in对应的不是字节流吗?
为了操作键盘的文本数据方便,转成字符流。字符串操作最方便。
所以既然明确了Reader,就将System.in转成字符流用到了,
用到了Reader体系中的转换流:InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in);
需要提高效率吗? 可以使用缓冲 BufferedReader
BufferedReader br=new BufferedReader(isr);
目的 OutputStream, Writer
是否是纯文本? 是 ! Writer
设备:硬盘文件。
使用FileWriter
FileWriter fw=new FileWriter("c.txt");
需要提高效率吗? 需要 BufferedWriter
BufferedWriter bw=new BufferedWriter(fw);
******************************************************************************
扩展一下,想要把录入的数据按照指定的编码表(utf-8),将数据存到文件中
目的 OutputStream, Writer
是否是纯文本? 是 ! Writer
设备:硬盘文件。
使用FileWriter
但是存储时需要加入指定编码表,而指定的编码表只有转换流可以指定。
所以要使用使用的对象是OutputStreamWriter.
而该转换流对象,要接收一个字节输出流。而且还可以操作文件的字节输出流。FileOutputStream
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d.txt"),"utf-8");
需要高效的 , BufferedWriter
转换流,什么时候用呢?字符和字节间的桥梁。通常涉及到字符编码转换时。需要用到转换流
--------------------------------------------------------------------------------------------
练习:将一个文本数据打印在控制台上,要按照以上格式自己完成三个明确。
*/
class WriteDemo1
{
public static void main(String [] args)throws IOException
{
BufferedReader br=
new BufferedReader (new InputStreamReader(new FileInputStream("e:\\Copy.txt")));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
String s=null;
while((s=br.readLine())!=null)
{
bw.write(s);
bw.newLine();
bw.flush();
}
}
}
IO流 选取
最新推荐文章于 2022-07-31 22:09:17 发布