Java IO学习札记(IO流操作小技巧)


接着上一篇写,一些补充。
其实毕老师的对字符流和字节流的使用分类总结还是很经典的,让你在不知道未使用什么流而抓耳挠腮时,有种豁然开朗的感觉。毕老师讲到:

流操作的基本规律:
最痛苦的就是流对象有很多,不知道该用哪一个。
通过仨个明确来完成。
1、明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer
2、操作的数据是否是纯文本。
是:字符流。Reader Writer
不是:字节流。InputStream OutputStream 

3、当体系明确后,在明确要使用那个具体的对象。
通过设备来进行区分:
源设备:内存、键盘、硬盘。
目的设备:内存、硬盘、控制台。

1、将一个文本文件中的数据存储到另一个文件中,复制文件。
源:因为是源,所以使用读取流InputSteam Reader
是不是操作文本文件。
是!这是就可以选择Reader
这样系统就明确了。

接下来明确钥匙该体系中的那个对象
明确设备:硬盘上的一个文件。
Reader体系中可以操作文件的对象是FileReader

是否需要提高效率:是!加入Reader体系中的缓冲区 BufferedReader

FileReader fr = new FileReader("a.txt");
BufferedReader br = new BufferedReader(fr);
目的:OutputStream Writer
目的是否是纯文本的?
是!Writer。
明确设备:
设备:硬盘,一个文件。
Writer体系中可以操作文件的对象FileWriter。
是否需要提高效率:是!加入Writer体系中的缓冲区 BufferedWriter
FileWriter fw = new FileWriter("b.txt");
BufferedWriter bw = new BufferedWriter(fw);

练习:将一个图片文件中的数据存储到另一个文件中,复制文件。按照以上格式自己完成三个明确(和上一篇中拷贝一个mp3文件是一样的)
------------------------------------------------------------------------------------------
2、需求:将键盘录入的数据保存到一个文件中。
这个需求中有源和目的都存在。
那么分别分析
源:InputStream Reader
是不是纯文本?是!Reader
设备:键盘。对应的对象是System.in.
不是选择Reader吗?System.in对应的不是字节流吗?
为了操作键盘文本数据方便。转成字符流,按照字符串操作是最方便的。
所以,既然明确了Reader,就将System.in转成字符流Reader
用到了Reader体系中转换流InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
需要提高效率吗?需要!BufferedReader
BufferedReader bufr = new BufferedReader(isr);

目的:OutputStream Writer
是否是纯文本?是!Writer。
设备:硬盘上的文件,使用FileWriter
FileWriter fw = new FileWriter("c.txt");
需要提高效率?需要!BufferedWriter
BufferedWriter bufw = new BufferedWriter(fw);
**********************************************************************************
扩展一下!!!想要把录入的数据按照指定的编码表(urf-8),将数据存到文件中。
目的:OutputStream Writer
是否是纯文本?是!Writer。
设备:硬盘上的文件,使用FileWriter
FileWriter使用的是默认表码表。GBK

但是存储时,需要加入指定编码表,而制定的编码表只有转换流可以指定。
所以要使用的对象是OutputStreamWriter。
而该转换流对象要接受一个字节输出流。而且还可以操作文件的字节输出流。FileOutputStream
FileOutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
需要提高效率?需要!BufferedWriter
BufferedWriter bufw = new BufferedWriter(osw);

所以记住,转换流是字符和字节的桥梁。通常,涉及到字符编码转换时,需要用到转换流。
------------------------------------------------------------------------------------------------------------
/*
练习:讲一个文本数据打印到控制台上。按照以上格式自己完成三个明确
*/
public class TransStreamDemo 
{
	public static void main(String[] args) throws IOException
	{
		//System.setIn(new FileInputStream("PersonDemo.java"));
		System.setOut(new PrintStream("zz.txt"));
		//键盘录入最常见写法
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		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();
	}
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值