Properties:

  Properties是hashtable的子类(在java.util包中)。该集合的特点:可以用于键值对形式的配置文件,且不允许Key重复,若有重复的,后者会覆盖前者。

  也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串

  是集合中和IO技术相结合的集合容器。

  Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。像Python支持的配置文件是.ini文件,同样,它也有自己读取配置文件的类ConfigParse,方便程序员或用户通过该类的方法来修改.ini配置文件。在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释。

1,继承关系

         

2.常用方法

  【案例演示】:通过setProperty()方法来设置属性信息。

 import java.util.Properties;
import java.util.Set; public class PropertiesDemo {
public static void main(String[] args) {
Properties properties=new Properties();
properties.setProperty("zhangsan","20");//设置键值对,注意参数都是String类型
properties.setProperty("lisi","21");
properties.setProperty("lisi","22");
System.out.println(properties);
String value=properties.getProperty("lisi");//通过Key获取Value
System.out.println("李四的值为:"+value);
Set<String> names=properties.stringPropertyNames();//返回的是Key的集合
for (String name:names) {
System.out.println(name+"---"+properties.getProperty(name));
}
}
}

运行结果:

  上面那个例子是通过方法来将属性信息添加到集合中的,那如何将文件中已存在的属性信息又存储到集合中来呢?

  【案例演示】:如何将流中的数据存储到集合中。

 import java.io.*;
import java.util.Properties;
import java.util.Scanner; public class FileToProperties {
public static void main(String[] args) throws IOException {
Scanner in=new Scanner(System.in);
String filename=in.nextLine();
BufferedReader br=new BufferedReader(new FileReader(filename));//因为是文本,所以Reader.
Properties properties=new Properties();//定义一个集合
String str=null;
while ((str=br.readLine())!=null){//读取文本中的数据
String[] keys= str.split("=");
properties.setProperty(keys[0],keys[1]);//存储到集合中
}
br.close();
System.out.println(properties);
}
}

  运行结果:

  由于上述代码操作太麻烦,所以在1.6版本之后出现了load()方法。可以直接将流对象作为参数传递给load()方法。

  load(Reader reader);

  load(InputStream in);

 import java.io.*;
import java.util.Properties;
import java.util.Scanner; public class FileToProperties {
public static void main(String[] args) throws IOException {
Scanner in=new Scanner(System.in);
String filename=in.nextLine();
BufferedReader br=new BufferedReader(new FileReader(filename));//因为是文本,所以Reader.
Properties properties=new Properties();//定义一个集合
properties.load(br);//直接将流对象加载进集合
br.close();
properties.list(System.out);//将属性列表输出到指定的输出流中。此处是控制台
}
}

  假如你通过上述代码将配置文件中属性信息都打印出来后,发现Key为“lisi”的Value值存储错了,于是你想到了用Properties中的setProperty()方法重新设置lisi的值。

  但是通过查文档你就会发现,setProperty()方法只是单纯的将内存中的值改了,而本地文件中值却没有改,当关闭电脑后,内存中的信息就会清零,那么当下次在加载配置文件时,去到lisi的Value值仍为改过之前的。

  所以还要用store()方法,将集合中的信息再次写入流中,并保存到本地文档。

 import java.io.*;
import java.util.Properties;
import java.util.Scanner; public class FileToProperties {
public static void main(String[] args) throws IOException {
Scanner in=new Scanner(System.in);
String filename=in.nextLine();
BufferedReader br=new BufferedReader(new FileReader(filename));//因为是文本,所以Reader.
Properties properties=new Properties();//定义一个集合
properties.load(br);//直接将流对象加载进集合
properties.setProperty("lisi","00");//重新设置属性
FileWriter fw=new FileWriter(filename);
properties.store(fw,"bianji");//将修改完的集合再次保存到文件中,第二个参数为注释信息
br.close();
properties.list(System.out);
}
}

运行之前的文档信息:     

    

运行完文档信息发生变化:(注意#号为注释信息!!)

    

  【案例演示】:用于记录应用程序运行次数,如果使用次数已到,那么就会给出注册提示。

  注意:计数前要先将配置文件加载进来,计数后要将集合数据写入文档!

     还要注意计数文件是在第一次访问程序之后才创建的。

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties; public class UseCount {
public static void main(String[] args) throws IOException {
Properties properties = new Properties();//创建一个集合
File file=new File("c:\\html\\test\\demo.txt");//将要读取的文件封装成对象
if(!file.exists()){//先判断计数文件是否已被创建
file.createNewFile();//不存在则要先创建
}
FileInputStream fis = new FileInputStream(file);//将封装成对象的文件加载到输入流中
properties.load(fis);//然后将流加载到集合中
String num = properties.getProperty("count");//获取集合中Key为count的Value值
if(num==null){//如果value为null
properties.setProperty("count",Integer.toString(1));
}else {
int count=Integer.valueOf(properties.getProperty("count"));
++count;
if(count>5){
System.out.println("次数用完!");return;
}
properties.setProperty("count",Integer.toString(count));
}
FileOutputStream fos=new FileOutputStream(file);
properties.store(fos,"kk");
fis.close();
fos.close();
}
}

Properties(hashtable的子类)的更多相关文章

  1. properties类是Hashtable的子类

    properties类是Hashtable的子类 增加了将Hashtable对象中的关键字保存到文件和从文件中读取关键字和值到Hashtable对象中的方法 Properties.store方法存储P ...

  2. Properties属性操作

    package com.properties; import java.io.FileInputStream; import java.io.FileOutputStream; import java ...

  3. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  4. 【Java编程思想笔记】-集合2

    详细的接口API转自博客:https://blog.csdn.net/jyg0723/article/details/80498840#collection-api-%E8%AF%A6%E8%A7%A ...

  5. java工程师-面试知识点总结

    目录(转载) [x] 一.Java基础(语言.集合框架.OOP.设计模式等) [x] 二.Java高级(JavaEE.框架.服务器.工具等) [x] 三.多线程和并发 [x] 四.Java虚拟机 [x ...

  6. (1)集合 ---遍历map集合

    Map接口     实现Map接口的类用来存储键(key)-值(value) 对.Map 接口的实现类有HashMap和TreeMap等.Map类中存储的键-值对通过键来标识,所以键值不能重复. Ha ...

  7. Java研发工程师知识点总结

    Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 ...

  8. java(集合框架)(转)

    前言 集合①只能存放对象,存放基本类型会自动转成对应的对象②可以存放不同类型的对象(如果不使用泛型的话),且不限数量③集合中存放的只是对象的引用 集合详解 集合-1.png 集合-2.png   It ...

  9. Java集合框架要点概括(Core Knowledge of Java Collection)

    目录 有哪些集合类 Set类 Queue类 List类 Map类 HashMap的实现原理,是否线程安全,如何使其做到线程安全 HashMap的实现原理 HashMap的数据结构 HashMap的存取 ...

随机推荐

  1. 用ModelAndView返回视图结果返回的是对应RequestMapping拼接的路径

    今天,遇到一个贼坑的问题,就是我明明可以将逻辑视图名视图存入ModelAndView,结果返回的页面信息是RequestMapping拼接的视图解析路径,最后经过检查多遍代码,发现原来是ModelAn ...

  2. path_info和get_full_path()的区别

    1.get_full_path() 获取的url路径包含参数 2.path_info 获取的路径不包含参数 注意:获取的路径都不包含协议 IP 和端口 3.补充 sesssion http://127 ...

  3. 7.Arrays数组的工具类

    Arrays类: 数组的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作. ...

  4. 插入数据值 设置标签属性的值 来自 精通ASP-NET-MVC-5-弗瑞曼

  5. Java基础系列2:深入理解String类

    Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...

  6. 当vps服务器被墙,如果用xshell连接

    当然你的被墙了,肯定是访问不了,你得去找一个新的可用的节点去访问,在xshell里面设置代理就能连接上.上图. 然后是两个不同的结点 鼠标放在小火箭上面就能显示

  7. 最小环(floyd以及dijkstra实现+例题)

    最小环定义 最小环是指在一个图中,有n个节点构成的边权和最小的环(n>=3). 一般来说,最小环分为有向图最小环和无向图最小环. 最小环算法: 直接暴力: 设\(u\)和\(v\)之间有一条边长 ...

  8. Web自动化测试项目(七)日志

    一.日志作用 调试程序 了解系统程序运行的情况,是否正常 系统程序运行故障分析与问题定位 用来做用户行为分析和数据统计 二.为项目添加日志 └── utils ├── log_utils.py └── ...

  9. RSYNC 同步工具

    Rsync 数据同步工具 一.Rsync简介 1.检测一下你的机器上是否已经安装  --->可以通过yum安装  或者  源码 Server  192.168.201.151 Client    ...

  10. 如何获取 C# 类中发生数据变化的属性信息

    一.前言 在平时的开发中,当用户修改数据时,一直没有很好的办法来记录具体修改了那些信息,只能暂时采用将类序列化成 json 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字 ...