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的存取 ...
随机推荐
- restframework 解析器、渲染器、url控制组件
一.解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 1.分类 from rest_framework.parsers impo ...
- CTF中关于XXE(XML外部实体注入)题目两道
题目:UNCTF-Do you like xml? 链接:http://112.74.37.15:8008/ hint:weak password (弱密码) 1.观察后下载图片拖进WINHEX发现提 ...
- PSP第一次总结
项目计划总结 周活动总结表 姓名:王金萱 ...
- 「 从0到1学习微服务SpringCloud 」08 构建消息驱动微服务的框架 Spring Cloud Stream
系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...
- 实验四:划分多个VLAN
1.配置图 2.配置命令 Switch1.Switch2.Switch3的配置是一样的,如下所示:(可直接复制交换机,可以只配置一次) 通过命令查看配置: Switch0的配置如下: 通过命令查看tr ...
- RainbowPlan团队项目-总结
博客介绍 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ 这个作业要求在哪里 https:// ...
- 创建dynamics CRM client-side (十二) - HTML Web Resource
HTML Web Resource是我们经常使用的一个功能. 第一步, 我们先创建好一个HTML. 接下来,我们要在web resource中创建新的html web resource. 我们在tex ...
- Liunx创建到部署ASP.NET Core项目从零开始-----使用Centos7
一.搭建环境 1..注册Microsoft密钥和源 执行命令:sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages ...
- CAP原理和BASE理论
CAP原理 概述 CAP理论的主要场景是在分布式环境下,在单机环境下,基本可不考虑CAP问题. CAP理论就是说在分布式存储系统中,最多只能实现上面的两点.而由于当前的网络硬件肯定会出现延迟丢包等问题 ...
- mysql --->mysql 外键总结
mysql 外键总结 1.设置外键MySQL ERROR 1005 错误 MySQL ERROR 1005 (主要是约束不一样导致的)例如: 1.两表外键的引用类型不一样,如主键是int外键是char ...