黑马程序员学习笔记——流操作规律

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ---------------------- 


选择流时的一些判断准则

1.明确源和目的。
源:输入流。InputStream, Reader
目的:输出流。OutputStream, Writer
2.操作的数据是否是纯文本。
是:字符流
不是:字节流
3.当体系明确后,再明确要使用哪个具体的对象
通过设备来区分:
源设备:内存、硬盘、键盘
目的设备:内存、硬盘、控制台
4.看是否需要转换字节和字符,或者需要制定字符集
源:InputStreamReader
目标:OutputStreamWriter
5.是否需要提高效率
源:BufferedInputStream,BufferedReader
目标:BufferedOutputStream, BufferedWriter

举例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

/**
 * 需求:将一个文件存为UTF-8的形式,然后读出来在控制台输出
 * 
 * 分析:
 * 1.同时具备输入流和输出流
 * 2.纯文本,用字符流
 * 3.从硬盘的文件到硬盘的文件再到控制台,可用File流和System.out
 * 4.因为有字符集的需求,所以用到InputStreamReader和OutputStreamWriter
 * 5.可以使用Buffered提高效率
 *
 */
public class ParseRequire {

	public static void main(String[] args) {
//		因为源文件就是GBK编码的,而FileReader的默认编码也是GBK,所有就没指定字符集了
		FileReader fr = null;
		BufferedReader br = null;
//		因为被写入的文件原来是GBK,现在要转换为UTF-8,所以需要用OutputStreamWriter来指定字符集
		FileOutputStream fos = null;
		OutputStreamWriter osw = null;
		BufferedWriter bw = null;
		
//		因为源文件是UTF-8的编码,所以如果需要正确读出来,需要指定字符集
		FileInputStream fis1 = null;
		InputStreamReader isr1 = null;
		BufferedReader br1 = null;
		OutputStream os = null;
		OutputStreamWriter osw1 = null;//因为System.out是字节流形式,所以转换到字符流更有效
		BufferedWriter bw1 = null;
		/*
		 * 将一个文件拷贝成UTF-8的形式
		 */
		try {
			fr = new FileReader("c:\\学习步骤.txt");
			br = new BufferedReader(fr);
			fos = new FileOutputStream("c:\\学习步骤1.txt");
			osw = new OutputStreamWriter(fos, "UTF-8");
			bw = new BufferedWriter(osw);
			
			String str = null;
			while ((str=br.readLine()) != null) {
				bw.write(str);
				bw.newLine();
				bw.flush();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		/*
		 * 将一个UTF-8的文件读出到控制台
		 */
		try {
			fis1 = new FileInputStream("c:\\学习步骤1.txt");
			isr1 = new InputStreamReader(fis1, "UTF-8");
			br1 = new BufferedReader(isr1);
			os = System.out;
			osw1 = new OutputStreamWriter(os);
			bw1 = new BufferedWriter(osw1);
			String str = null;
			while ((str=br1.readLine()) != null) {
				bw1.write(str);
				bw1.newLine();
				bw1.flush();
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (br1 != null) {
				try {
					br1.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (bw1 != null) {
				try {
					bw1.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

note:FileReader和FileWriter的 默认编码为GBK







---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net














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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值