java基础知识回顾之java集合类-Properties集合

时间:2022-12-19 08:27:06

/**
 java.lang.Object
   |--java.util.Dictionary<K,V>
      |--java.util.Hashtable<Object,Object>
          |--java.util.Properties

* @author Administrator
 *Properties集合:
         * 特点:
         * 1,该集合中的键和值都是字符串类型。
         * 2,集合中的数据可以保存到流中,或者从流加载
         * 3,表示一个持久的属性集,可以把内存里面的数据保存到硬盘上的文件当中。
         * 4,此类是线程安全的,可以用在多线程当中
         * 通常该集合用于操作以键值对形式存在的配置文件。
         *
         *  存数据:public Object setProperty(String key,String value) 此方法是线程同步的,调用HashTable的put方法
             取数据:public String getProperty(String key):返回属性列表里面建对应的值
             遍历:  public Set<String> stringPropertyNames():返回属性列表中的键key集
                        public Enumeration<?> propertyNames():返回属性列表中所有键的枚举

与IO输入输出流相关的操作:
                    1.public void list(PrintStream out):用于调试
  
                   2.将属性集合中的键值信息写入字节输出流
                   public void store(OutputStream out,String comments)throws IOException
                   将属性集合中的键值信息写入字符输出流
                   public void store(Writer writer,String comments) throws IOException
                 
                   3.从输入”字节流“中读属性列表(键-值)。从文件当中读取信息到输入流中,然后从输入流中读取到集合中
                   public void load(InputStream inStream) throws IOException 从
                   从输入"字符流"中读取属性列表
                   public void load(Reader reader) throws IOException
                   
 */

测试代码如下:

public class PropertiesDemo {

    public static void main(String[]args) throws IOException{
method_5(); }
/**
*
* Properties结合的存和取元素,遍历
*/
public static void method_1(){
Properties pr = new Properties();
pr.setProperty("张三", "20");
pr.setProperty("李四", "23");
pr.setProperty("王五", "34");
pr.setProperty("赵六", "45");
/*//遍历返回一个String<Set>集合遍历,java 1.6后出来的新方法
//遍历方法1
Set<String>keys = pr.stringPropertyNames(); for(String key : keys ){
String value = pr.getProperty(key);//返回键对应的value值
System.out.println(key+"="+value);
}*/ //遍历2,之前使用的老方法
Enumeration enumer = pr.propertyNames();
while(enumer.hasMoreElements()){
String key = (String) enumer.nextElement();
String value = pr.getProperty(key);
System.out.println(key+"="+value);
}
}
/**
* 返回当前系统属性集合,包括java虚拟机的信息,运行时环境,操作系统信息
*
*/
public static void method_2(){
Properties pro = System.getProperties();//返回值 Properties
pro.list(System.out);
}
/**
* 将集合中的键-值信息存储到文件当中,使用OutputStream字节流,使用store方法
*
*/
public static void method_3(){
Properties pr = new Properties();
pr.setProperty("zhangshan", "20");
pr.setProperty("lisi", "23");
pr.setProperty("wangwu", "34");
pr.setProperty("zhaoliu", "45");
OutputStream os = null;
try {
os = new FileOutputStream("info.txt");//持久化到文件当中
pr.store(os, "info");//将集合中的键-值信息写入到输出流中 } catch (IOException e) {
e.printStackTrace();
}finally{
if(os != null){
try {
os.close();//保存到文件当中
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 将资源文件信息读入到读入到输入流中,从输入流中读取属性列表
* 1.集合中数据来自于一个文件
* 2.文件中的数据是键值对
* 3.使用load方法从输入流中读取数据
*
* * 读取.properties文件
* Properties pro = new Properties();
* 打开classpath下面的指定的配置文件,读取properties配置文件
* InputStream in = getClass()
* .getClassLoader()
* .getResourceAsStream("log4j.properties");
* pro.load(in);
* 然后对Properties集合进行遍历
*/
public static void method_4(){
Properties pro = new Properties();
InputStream in = null;
try {
//关联已有的属性文件
in = new FileInputStream("info.txt");
pro.load(in);//load到集合中
pro.list(System.out);//使用调试方法遍历集合,打印到控制台
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(in != null){
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} }
/**
* 如果不存在创建文件,文件存在,读取文件并对已有问价进行修改
* @throws IOException
*
* info.txt文件中:
* #update zhaoliu
#Fri Aug 01 11:13:46 CST 2014
zhangshan=20
lisi=23
zhaoliu=30
wangwu=34
说明:看store源码知道:
注释内容都用#号开头
写入当前时间
key-value对 */
public static void method_5() throws IOException{
File file = new File("info.txt");
if(!file.exists()){
file.createNewFile();
}
//通过字符输入流对文件进行读取
Reader fr = new FileReader(file);
Properties pro = new Properties();
//从字符输入流中读取文件列表
pro.load(fr);
//修改配置文件信息
pro.setProperty("zhaoliu", "30"); //写入到字符输出流中,持久化修改后的文件
Writer fw = new FileWriter(file);
pro.store(fw, "update zhaoliu"); //遍历修改后的文件
Set<String> keys = pro.stringPropertyNames();
for(String key:keys){
String value = pro.getProperty(key);
System.out.println(key+"="+value);
}
fr.close();
fw.close();
}
}
 

java基础知识回顾之java集合类-Properties集合的更多相关文章

  1. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  2. java基础知识回顾之java Socket学习(二)--TCP协议编程

    TCP传输(传输控制协议):TCP协议是一种面向连接的,可靠的字节流服务.当客户端和服务器端彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能进行数据的传输.它将一台主机发出的字节流无差错的 ...

  3. java基础知识回顾之java Socket学习(一)--UDP协议编程

    UDP传输:面向无连接的协议,不可靠,只是把应用程序传给IP层的数据报包发送出去,不保证发送出去的数据报包能到达目的地.不用再客户端和服务器端建立连接,没有超时重发等机制,传输速度快是它的优点.就像寄 ...

  4. java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍

       线程的概述:         线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系 ...

  5. java基础知识回顾之java Thread类学习(八)--java&period;util&period;concurrent&period;locks(JDK1&period;5)与synchronized异同讲解

    看API文档介绍几个方法:  JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock                    2.接口Conditio ...

  6. java基础知识回顾之---java String final类普通方法的应用之&OpenCurlyDoubleQuote;按照字节截取字符串”

    /*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...

  7. java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

     *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时 ...

  8. java基础知识回顾之java Thread类学习(四)--java多线程安全问题(锁)

    上一节售票系统中我们发现,打印出了错票,0,-1,出现了多线程安全问题.我们分析为什么会发生多线程安全问题? 看下面线程的主要代码: @Override public void run() { // ...

  9. java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:

    总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但 ...

随机推荐

  1. jQuery源码分析系列:Callback深入

    关于Callbacks http://www.cnblogs.com/aaronjs/p/3342344.html $.Callbacks()的内部提供了jQuery的$.ajax() 和 $.Def ...

  2. WindowsForm如何实现类似微软project软件的甘特图?

    在管理软件研发过程中,特别是涉及项目管理或者生产计划方面,都需要一款类似微软project的控件对项目下的分解任务进行图形展示(甘特图).下面介绍一下在WindowsForm下如何实现类似微软proj ...

  3. Hbuider 同步github

    别人的教程,仅作收藏. http://blog.csdn.net/u011871921/article/details/44238971

  4. SQL SERVER数据库索引、外键查找

    1.索引查找 select a.name as tabname ,h.name as idname,h.type_descfrom sys.objects as a right join sys.in ...

  5. Javaweb---服务器Tomcat配置

    1.文件下载 Tomcat官方地址:http://tomcat.apache.org/ 2.文件解压 将下载好文件解压在你想放置的位置即可 解压后的文件: 3.进行配置 一般都要配置这两个参数: 1) ...

  6. bootstrap-treeview分级展示列表树的实现

    html页面: 要引用 "/webapp/common/css/bootstrap-treeview.css" "/webapp/common/js/bootstrap- ...

  7. &quot&semi;tsc&period;exe&quot&semi;已退出,代码1

    公司开发新项目要用到ABP,于是到处在网上找些资料学习,在官网下好了模板(http://aspnetboilerplate.com/Templates),拿下来后用vs(博主用的是vs2013)编译后 ...

  8. HDU 1114

    在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持.该活动的主要收入来自于 Irreversibly Bound Money (IBM).思路很简单.任何时候,某位 ACM 会员有少量的钱时 ...

  9. jquery 下拉列表选择值

    选择下拉列表值样例方式 $("#updateAppName").get(0).selectedIndex = 0; $("#updateAppName").ge ...

  10. leetcode&colon;Minimum Depth of Binary Tree【Python版】

    1.类中递归调用添加self: 2.root为None,返回0 3.root不为None,root左右孩子为None,返回1 4.返回l和r最小深度,l和r初始为极大值: # Definition f ...