黑马程序员-流的选用

1 篇文章 0 订阅
0 篇文章 0 订阅

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

  流对象最痛苦的就是很多流对象 不知道使用那一个来完成操作,我们需要通过三个明确来确定究竟使用那个对象实现我们的功能
 1.明确源和目的
  源:输入流 InputStream Reader
  目的:输出流 OutputStream Writer
  2.明确操作是不是纯文本
  是:用字符流
  不是:字节流
  3.体系明确后,再明确要使用那个具体的对象
  通过设备来进行区分:
  源设备:内存、硬盘、键盘
  目的设备:内存、硬盘、控制台
  
  eg1,将一个文本文件中的数据存储到另一个文件中,复制文件
  源:因为是源 所以使用读取流 InputStream Reader
  是否为操作文本文件 :是 
  选择使用Reader
  这样体系就明确了 
  接下来明确要使用该体系中的那个对象
  明确设备:硬盘。上的一个文件 
  Reader体系总可以操作文件的对象为FileReader
  
  是否需要提高效率:是  !加入Reader体系中的缓冲区 BufferedReader
  
  FileReader = new FileReader("a.txt");
  BufferedReader = new BufferedReader(fr);
  
  目的:文件 OutputStream Writer
  是否为纯文本: 是 Writer
  设备:硬盘 一个文件
  Writer中可以操作文件的对象为FileWriter
  
  是否需要提高效率:是  !加入Writer体系中的缓冲区 BufferedWriter
  
  FileWriter fw = new FileWriter("b.txt");

  BufferedWriter = new BufferedWriter(fw);

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


  按照以上格式  完成以上三个明确
  1.明确源:文件输入流 用InputStream Reader
是否为纯文本:否 用InputStream
源设备:硬盘 用FileInputStream
是否需要提高效率:是
BufferedInputStream
2.明确目的:文件 输出流 用OutputStream Writer
是否为纯文本:否 用OutputStream
目的设备:硬盘
是否需要提高效率:是

BufferedOutputStream


  

通过三个明确我们可以准确的定位选择究竟使用那个流对象,也就明白了如何操作文件

下面是一个小例子的具体实现:

  题目要求:将键盘录入的数据保存到一个文件中

(1)源:输入流 用InputStream Reader
是否为纯文本 是 用Reader 由于下面用的System.in 返回是一个InputStream 所以这里用InputStreamReader
设备:键盘录入 用System.in
  是否需要提高效率:是
  用BufferedReader
 (2)目的:输出流 用OutputStream Writer
  是否为纯文本: 是 用Writer
  设备:硬盘 用FileWriter
  是否需要提高效率 是
  用BufferedWriter

package com.chuanzhi.io.stream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class TransStreamDemo {

	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		BufferedWriter bw = null;
		
		String line = null;
		try {
			bw = new BufferedWriter(new FileWriter("out.java"));
			while((line = br.readLine()) != null){
				if("over".equals(line))
					break;
				bw.write(line);
				bw.newLine();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(bw != null){
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值