黑马程序员技术交流社区
标题: IO流中与集合和线程结合的两种流操作 [打印本页]
作者: IT_JM 时间: 2013-10-11 12:13
标题: IO流中与集合和线程结合的两种流操作
Properties类
一、概述
1、Properties是Hashtable的子类,它具备Map集合的特点。而且它里面还有存储的键值对,都是字符串,无泛型定义。是集合中和IO技术想结合的集合容器。
2、特点:
1)可用于键值对形式的配置文件
2)在加载时,需要数据有固定的格式,常用的是:键=值
二、特有方法
1、设置
Object setProperty(String key,String value);
//设置键和值,调用Hashtable的方法put
2、获取
String getProperty(String key);
//指定key搜索value
Set<String> stringPropertyName();
//返回属性列表的键集,存入Set集合
3、加载流和存入流
void load(InputStream ism);
//从输入字节流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
void load(Readerreader);
//从输入字符流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
voidlist(PrintStream out);//将属性列表输出到指定的输出流
void store(OutputStreamout,String comments);
//对应load(InputStream )将属性列表(键值对)写入输出流。comments属性列表的描述。
void store(Writerwriter, String comments);
//对应load(Reader)将属性列表(键值对)写入输出流。comments属性列表的描述。
代码示例:- 1. /*
- 2. 练习:用于记录应用程序运行次数。如果使用次数已到,那么给出注册提示。
- 3.
- 4. 分析:
- 5. 很容易想到的是:计数器。可是该计数器定义在程序中,随着该应用程序的退出,该计数器也在内存中消失了。
- 6. 所以要建立一个配置文件,用于记录该软件的使用次数。该配置文件使用键值对的形式。键值对数据是map集合。数据是以文件形式存储。使用io技术。那么map+io——>Properties。
- 7.
- 8. 思路:1、用读取流关联文本信息文件。如果存在则读取,如果不存在,则创建
- 9. 2、每次运行,将文件数据存入集合中,读取值,判断次数,如果小于等于5次,则次数增加1次,如果大于则输出提示信息。
- 10. 3、将值小于等于5次的信息数据存入文件中
- 11. */
- 12. import java.util.*;
- 13. import java.io.*;
- 14.
- 15. class RunCount
- 16. {
- 17. public static void main(String[] args)throws IOException
- 18. {
- 19. int count=runCount();
- 20. if(count>5)//如果程序被使用了超过5次,则终止使用,并提示
- 21. {
- 22. System.out.println("次数到了,交钱!!!!!");
- 23. return ;
- 24. }
- 25. else
- 26. System.out.println("程序第"+count+"次Run!");
- 27. }
- 28. //获取程序运行的次数
- 29. public static int runCount()throws IOException
- 30. {
- 31. Properties ps=new Properties();//创建集合对象
- 32.
- 33. File file=new File("info.ini");//将文件进行封装
- 34. if(!file.exists())//判断是否存在
- 35. file.createNewFile();
- 36. FileReader fr=new FileReader(file);//将文件于读取流进行关联
- 37.
- 38. ps.load(fr);//加载流中的文件数据到集合中
- 39.
- 40. int count=0;//定义计数器
- 41. String value=ps.getProperty("time");//获取次数值
- 42.
- 43. if(value!=null)//如过值不等于null,则将其赋值给count
- 44. {
- 45. count=Integer.parseInt(value);
- 46. }
- 47. count++;//每启动一次自增
- 48. ps.setProperty("time",count+"");//将次数记录住集合
- 49.
- 50. FileWriter fw=new FileWriter(file);
- 51. ps.store(fw,"");//将集合中的数据存入硬盘文件中
- 52.
- 53. fr.close();//关流
- 54. fw.close();
- 55.
- 56. return count;//返回程序启动的次数
- 57. }
- 58. }
复制代码 管道流
一、概述
1、管道流:PipedInputStream和PipedOutputStream
2、特点:
a、输入输出可以直接进行连接,不用再借助数组或集合等容器进行临时存储。
b、一般结合多线程使用。通常,数据由某个线程写入PipedOutputStream对象,并由其他线程从连接的 PipedInputStream 读取。
二、常见操作步骤
1、要先创建一个读和写的两个类,实现Runnable接口,因为是两个不同的线程,覆盖run方法,注意,需要在内部处理异常。
2、创建两个管道流,并用connect()方法将两个流连接
3、创建读写对象,并传入两个线程内,并start执行。
代码示例
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |