黑马程序员_IO_下

------- android培训java培训、期待与您交流! ----------

流操作的基本规律:

通过三个明确来完成

1.明确源和目的。
源:输入流。InputStream  Reader
目的:输出流。OutputStream  Writer。
2.操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3.当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。

1.将键盘录入的数据控制台输出
源:键盘录入。
目的:控制台。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

2,需求:想把键盘录入的数据存储到一个文件中。
源:键盘。
目的:文件。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));

3,需求:想要将一个文件的数据打印在控制台上。
源:文件。
目的:控制台。
BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt")));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

通过实例来分析流操作:

1.将一个文本文件中数据存储到另一个文件中:复制文件。
是源,使用读取流: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);

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);

3.想要把录入的数据按照指定的编码表(UTF-8),将数据存到文件中。
目的:OutputStream  Writer
是否是存文本,是则用Writer
设备:硬盘上的一个文件,使用 FileWriter
但是FileWriter是使用的默认编码表:GBK
但是存储时,需要加入指定编码表UTF-8,而指定的编码表只有转换流可以指定。
所以要使用的对象是OutputStreamWriter
而该转换流对象要接收一个字节输出流。而且还可以操作的文件的字节输出流,FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
为了提高效率加入缓冲区
BufferedWriter bufw = new BufferedWriter(osw);
转换流:字符和字节之间的桥梁,并且涉及到字符编码转换时,需要用到转换流。

java.uitl.Properties

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便。

Properties属性文件用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类。这个类就是 java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。 


我们可以看到Properties是Hashtable的子类。
也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串,不需要泛型
Properties 是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值。

Properties类的重要方法
1. getProperty ( String  key),用指定的键在此属性列表中搜索属性。也就是通过参数 key,得到 key 所对应的 value。
2. load(InputStream  inStream),从输入流中读取属性列表(键和元素对),通过对指定的文件("test.properties")进行装载来获取该文件中的所有键-值对。以供 getProperty(String key)来搜索。
3.setProperty(String  key, String  value),调用 Hashtable 的方法 put().他通过调用基类的put方法来设置键-值对。
4.store(OutputStream  out, String  comments),以适合使用 load 方法加载到 Properties 表中的格式,将此Properties 表中的属性列表(键和元素对)写入输出流。与load方法相反,该方法将键-值对写入到指定的文件中去。


实例1:

你用户第一次设置好声音的大小为50,等他关掉程序,下一次在启动还能知道属性信息


初始值


运行后


实例2:

用于记录应用程序运行次数,如果使用次数已到,那么给出注册提示。

思路:我们可以利用计数器来完成,该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。可是随着该应用程序的退出,该计数器也在内存中消失了。下一次在启动该程序,又重新开始从0计数。不能保存住上次设置的数据,实际上,程序即使结束,该计数器的值也存在,下次程序启动在会先加载该计数器的值并加1后在重新存储起来。所以要建立一个配置文件,用于记录该软件的使用次数,我们就可以利用Properties类来实现。


----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值