Properties(hashtable的子类)
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的子类)的更多相关文章
- properties类是Hashtable的子类
properties类是Hashtable的子类 增加了将Hashtable对象中的关键字保存到文件和从文件中读取关键字和值到Hashtable对象中的方法 Properties.store方法存储P ...
- Properties属性操作
package com.properties; import java.io.FileInputStream; import java.io.FileOutputStream; import java ...
- 第19章 集合框架(3)-Map接口
第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...
- 【Java编程思想笔记】-集合2
详细的接口API转自博客:https://blog.csdn.net/jyg0723/article/details/80498840#collection-api-%E8%AF%A6%E8%A7%A ...
- java工程师-面试知识点总结
目录(转载) [x] 一.Java基础(语言.集合框架.OOP.设计模式等) [x] 二.Java高级(JavaEE.框架.服务器.工具等) [x] 三.多线程和并发 [x] 四.Java虚拟机 [x ...
- (1)集合 ---遍历map集合
Map接口 实现Map接口的类用来存储键(key)-值(value) 对.Map 接口的实现类有HashMap和TreeMap等.Map类中存储的键-值对通过键来标识,所以键值不能重复. Ha ...
- Java研发工程师知识点总结
Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 ...
- java(集合框架)(转)
前言 集合①只能存放对象,存放基本类型会自动转成对应的对象②可以存放不同类型的对象(如果不使用泛型的话),且不限数量③集合中存放的只是对象的引用 集合详解 集合-1.png 集合-2.png It ...
- Java集合框架要点概括(Core Knowledge of Java Collection)
目录 有哪些集合类 Set类 Queue类 List类 Map类 HashMap的实现原理,是否线程安全,如何使其做到线程安全 HashMap的实现原理 HashMap的数据结构 HashMap的存取 ...
随机推荐
- Docker学习(三)认识Docker和常用命令
Docker学习(三)认识Docker和常用命令 Docker体系结构 docker服务端,作为服务的提供方,核心进程 docker daemon,所有docker命令都是通过这个进程完成的 REST ...
- 关于爬虫的日常复习(3)—— request库
- JSONArray 与 List 互转
List 转 JSONArray // 通过JSONPath获取其中数据,也可以说自己生成的List List<JSONObject> caseList = JsonPath.read(r ...
- lind 语 api 数据的安全性 第四弹
web api的安全性怎么保证呢. 一般公司会自己封装一套请求的规范. 下面来看看lind语里的webapi安全规范 step one 先看下 diagram: 学而思: 从上面的图分析一下: 如果我 ...
- 创建过滤扩展方法 Creating Filtering Extension Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-17
- CSS-03-组选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- tomcat+jenkins搭建持续化集成环境
一.下载安装Tomcat 1.进入官网http://tomcat.apache.org/ 2.解压缩文件到指定目录 3.设置环境变量 a.新建CATALINA_HOME b.在path中设置 %CAT ...
- Gloang Swagger
功能 自动化生产接口文档 安装 # 安装swaggo get -u github.com/swaggo/swag/cmd/swag # 安装 gin-swagger go get -u github. ...
- 20190728三人开黑517codingACM模拟赛
三人组队开黑ACM膜你赛 果然我最蔡 我就写了ACF所以就写这些吧awa Problem A 人话:给你一个w×h的矩形蛋糕,然后告诉你两个蜡烛的坐标,两个蜡烛都在网格点上且不在蛋糕边缘,问如何切一刀 ...
- Linux后门的几种姿势
转载自 https://evilanne.github.io/2017/08/26/Linux%E5%90%8E%E9%97%A8-%E6%8C%81%E7%BB%AD%E5%85%B3%E6%B3% ...