JAVA--IO流操作确定流对象规律总结

目录

三个明确

案例思路分析

案例一

案例二

案例三:涉及转换流

示例


三个明确

通过三个明确来完成:

1.明确源和目的

    : 输入流 InputStream Reader

    目的: 输出流 OutputStream Writer

2.操作的数据是否是纯文本

    是: 字符流 Reader Writer

    不是: 字节流 InputStream OutputStream

3.当体系明确后,再明确要使用哪个具体的对象

    通过设备来区分:

源设备

    键盘 System.in, 硬盘 FileStream, 内存 ArrayStream…(内存流)

目的设备

    控制台 System.out, 硬盘 FileStream, 内存 ArrayStream…(内存流)

案例思路分析

案例一

需求:将一个文本文件中数据存储到另一个文件中,复制文件。

源:因为是源,所以使用输入流: InputStream Reader

    操作文本文件,纯文本 选Reader

    这样体系就明确了。

    接下来明确要使用该体系中的哪个对象。

    明确设备:硬盘。 文件

    Reader体系中可以操作文件的对象是FileReader

    是否需要提高效率:是

    加入Reader体系中的缓冲区 BufferedReader  

    FileReader fr=new FileReader("a.txt");

   BufferedReader bufr=new BufferedReader(fr);

目的:输出流 OutputStream Writer

    操作纯文本 选Writer

    设备:硬盘。 一个文件

    Writer体系中可以操作文件的对象FileWriter

    加入Writer体系中的缓冲区提高效率 BufferedWriter

    FileWriter fw=new FileWriter("b.txt");

   BufferedWriter bufw=new BufferedWriter(fw);

案例二

需求:将一个图片文件中数据存储到另一个文件中,复制图片。

源:输入流 InputStream Reader

    操作图片文件,不是纯文本 InputStream

    这样体系就明确了。

    接下来明确要使用该体系中的那个对象。

    明确设备:硬盘。 文件

    InputStream体系中可以操作文件的对象是FileInputStream

    加入InputStream体系中的缓冲区提高效率:BufferedInputStream

    FileInputStream fis=new FileInputStream("1.jpg");

   BufferedInputStream bufis=new BufferedInputStream(fis);

目的:输出流 OutputStream Writer

    操作图片文件,不是纯文本 OutputStream

    设备:硬盘。 一个文件

    OutputStream体系中可以操作文件的对象FileOutputStream

    加入OutputStream体系中的缓冲区提高效率:BufferedOutputStream

    FileOutputStream fos=new FileOutputStream("2.jpg");

   BufferedOutputStream bufos=new BufferedOutputStream(fos);

案例三:涉及转换流

需求:将键盘录入的数据保存到一个文件中。

源:输入流 InputStream Reader

    键盘录入,纯文本 Reader

    设备:键盘录入 System.in

    但System.in对应的是字节流对象,所需要用到转换流,将InputStream转换为Reader

    使用Reader体系中的转换流InputStreamReader

    InputStreamReader isr=new InputStreamReader(System.in);

    需要提高效率:

    BufferedReader bufr=new BufferedReader(isr);  

目的:输出流 OutputStream Writer

    纯文本 Wirter

    设备:硬盘。 一个文件

    FileWriter fw=new FileWriter("c.txt");

    需要提高效率:

    BufferedWriter bufw=BufferedWriter(fw);

    扩展一下

想要把录入的数据按照指定的编码表(utf-8),将数据存到文件中。

目的:输出流: OutputStream Writer

    纯文本 Writer

    设备:硬盘。 一个文件

    但是FileWriter是使用默认编码表。GBK。

    按照需要要使用utf-8编码表,但只有字节流才可以指定编码表

    所以要使用Writer体系中的转换流:OutputStreamWriter

    OutputStreamWriter osw=OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");

    需要提高效率:

    BufferedWriter bufw=new BufferedWriter(osw);

    注意

 转换流什么时候使用:

    转换流是字符和字节之间的桥梁,通常,涉及到字符编码转换时,需要用到转换流

示例

1. 需求:把键盘录入转换成大写打印在控制台上。

源:键盘录入。

目的:控制台。

2.需求:想把键盘录入的数据存储到一个文件中。

源:键盘录入。

目的:文件。

3.需求:想要将一个文件的数据打印在控制台上。

源:文件。

目的:控制台。

public static void main(String[] args)throws IOException{
		// 键盘的最常见写法
		// BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));
		BufferedReader bufr =new BufferedReader(new FileReader("CopyPic.java"));
		
		// 控制台的常见写法
		// BufferedWriter bufw=new BufferedWriter(new FileWriter("out.txt"));
		BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
		
		String line=null;
		while((line=bufr.readLine())!=null){
			if("over".equals(line))
				break;
			bufw.write(line.toUpperCase());
			bufw.newLine();
			bufw.flush();
		}
		
		bufr.close();
		bufw.close();
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值