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. 一道简单到爆 Java面试题,居然挂了一票人

    很多时候bug往往都是出在,我们觉得非常简单,不起眼的基础知识上 年前公司最后一波招人,为年后项目做技术储备,主要招聘对象初中级Java开发,要求也并没有多苛刻,唯一一点基础稍好,快速上手做项目就行. ...

  2. 机器学习-决策树 Decision Tree

    咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sk ...

  3. 关于C++读入数字按位取出与进制转换问题

    这一片博客我就不写具体的一个题了,只是总结一种典型问题——读入数字按位取出. 就拿数字12345举例吧. 是首先,我们要取出个位.这样取出: 12345/1=12345 12345%10=5.    ...

  4. 个人第四次作业——Alpha测试

    Alpha项目测试 这个作业属于哪个课程 链接 这个作业要求在哪里 链接 团队名称 愿头发与你我同在 这个作业的目标 测试非本组的另外三组项目 姓名 张伟 学号 201731024216 测试报告 一 ...

  5. Lobooi 结对作业(24235+24229)

    结队作业 GitHub项目地址 https://github.com/Lobooi/PairProgramming.git 伙伴博客地址 https://www.cnblogs.com/lanti/p ...

  6. Rainbow Plan团队项目第一次作业——项目计划

    团队项目--Rainbow Plan英语学习App 1.团队简介 1.1团队名称:Rainbow Plan (彩虹计划) 1.2团队成员: 队员学号 队员姓名 201731024235 何继武(组长) ...

  7. Centos与Ubuntu

    共同点 1.两个系统都分别有桌面系统与服务器系统,不过ubuntu的桌面从外观上来看要比centos的漂亮 不同点 1.centos中新建的普通用户是没有sudo权限的,如果想让普通用户拥有sudo权 ...

  8. 使用RKE快速部署k8s集群

    一.环境准备 1.1环境信息 IP地址 角色 部署软件 10.10.100.5 K8s Master Etcd.Control 10.10.100.17 K8s Worker1 Worker 10.1 ...

  9. Kubernetes-Ingress资源详解

    什么是Ingress #阿里云称之为ingress路由!在 Kubernetes 集群中,主要用于接入外部请求到k8s内部,Ingress是授权入站连接到达集群服务的规则集合,为您提供七层负载均衡能力 ...

  10. django登录页面优化

    环境准备 1.python3.6 2.django2.0+ 3.bootstrap3 后台代码 #创建login_check视图函数,用来处理登录 def login_action(request): ...