Properties(配置文件):主要用于存储配置文件到硬盘上面和读取配置文件

public class Properties extends Hashtable<Object,Object>

注意:
    Properties实现了Map<Object, Object>接口
    Hashtable因为继承Dictionary类的,而这个类已经被淘汰了,新的实现类应该实现Map接口,例如HashMap和TreeMap
    Hashtable是通过"拉链法"实现的哈希表,它包括几个重要的成员变量:table, count, threshold, loadFactor, modCount。
    table是一个 Entry[] 数组类型,而 Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。

Properties构造方法:
    Properties()   创建一个无默认值的空属性列表。
    Properties(Properties defaults)    创建一个带有指定默认值的空属性列表。

Properties一些方法:
    setProperty(String key, String value)    其是本质是调用了 Hashtable 的方法 put,它只不过是确认了key和value的类型为String,因为在我们在生成配置文件的时候,会强制把键值对的类型转为String存储到Properties对象中Entry数组中
        注意:Properties对象也可以使用父类的类的put方法,但是这样我们就可以随便传入任何类型的键值对,这样可能会导致强转失败会报错的。调用setProperty方法是为了防止这个情况出现

store(OutputStream out, String comments)   以iso8859_1(欧洲)的格式存储到硬盘上面,如果存储中文会出现乱码
    store(Writer writer, String comments)    以gbk格式存储到硬盘上面(最好使用这个)

load(InputStream inStream)   把配置文件信息加载到存储在Entry数组中(也就是Properties对象中)
    load(Reader reader)       把配置文件信息加载到存储在Entry数组中(也就是Properties对象中)
    
    getProperty(String key) 在配置文件中根据key值读取key对应的值,如果找到返回key对应的值,找不到返回null
    getProperty(String key, String defaultValue) 在配置文件中根据key值查找键值对,如果查到返回key对应的值,找不到返回defaultValue值

Properties要注意的细节:
    1.在使用setProperty方法的时候会把key和value的类型都是String类型,如果我们存储其他类型的数据,会出现强转失败的现象
    2.如果配置文件信息一但使用了中文,那么在使用store方法生成配置文件的时候只能使用字符流来解决store(Writer writer, String comments)
    3.如果内容发生改变,一定要重新生成配置文件,因为我们使用load方法加载文件的时候,是把文件存储在了Properties对象中(Entry数组中)
    4.创建FileOutputStream对象一定要在load方法的后面,因为创建FileOutputStream对象的时候会清空配置文件里面的信息,如果写在load的前面这样我们使用load加载配置文件信息的时候,加载不到

//需求:使用一款软件,这个软件只能使用三次,第三次jvm会自动退出无法使用(我们可以在配置文件中存储一个int类型count的数据,用来存储使用的次数)

public class Demo1 {
public static void main(String[] args) throws IOException {
//首先我们应该判断这个使用者是否以前使用过这个软件,判断是否已经存在配置文件
File file = new File("D:\\新建文件夹\\a.properties");
//判断配置文件是否存在,如果不存在那么创建配置文件
if(!file.exists()) {
file.createNewFile();
}
//创建Properties对象
Properties properties = new Properties();
//把配置文件中的数据加载到prooerties中
properties.load(new FileReader(file));
//定义一个变量用来存储使用次数
int count = 1;
//获取这个key所对应的值
String value = properties.getProperty("count");
//判断配置配置文件中是否存在这个key值
if(value!=null) {
count = Integer.parseInt(value);
} //判断使用次数是否为3
if(count == 3) {
System.out.println("你已经使用了3次了,请购买正版");
System.exit(0);
} System.out.println("使用了"+count+"次");
count++; properties.setProperty("count",count+"");
properties.store(new FileWriter(file), "runtime");
}
}

运行的结果

a.properties文件

												

72.Properties(配置文件)的更多相关文章

  1. 读取.properties配置文件

    方法1 public  class SSOUtils { protected static String URL_LOGIN = "/uas/service/api/login/info&q ...

  2. java读取properties配置文件总结

    java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1) ...

  3. properties 配置文件中值换行的问题

    在使用properties配置文件的时候我们经常碰到如下两个问题 1:当a=b中的b值内容特别长的时候为了阅读方便我们手动换行,但如果我们直接回车那么后面的数据就会丢失.那如何解决呢? 例如: a=a ...

  4. properties配置文件的读取和写入

    /** * 类名:PropertiesUtil * 功能:提供对properties配置文件的读取和写入 * @author ChengTao */package com.xy.xyd.rest.bi ...

  5. java读取properties配置文件方法(一)

    为了修改项目参数方便,需要使用properties配置文件: 首先是需要三个jar包(不同的jar包,读取配置文件的方式会有所不同,这里使用的是2.6版本的jar包) commons configur ...

  6. java 顺序 读写 Properties 配置文件

    java 顺序 读写 Properties 配置文件 支持中文 不乱码 java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不 ...

  7. jdbc基础 (二) 通过properties配置文件连接数据库

    csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...

  8. Java 获取*.properties配置文件中的内容 ,常见的两种方法

    import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...

  9. Java读取Properties配置文件

    1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集.不过Properties的键和值都是字符串 ...

随机推荐

  1. kvm学习笔记(一,基础概念)

    前言 阿里云的云主机,采用的kvm,今天就花了点时间研究了下. 一.安装 官方文档参考:http://www.linux-kvm.org/page/HOWTO 二.快速建立一个基于vnc的虚拟机安装 ...

  2. ab(http)与abs(https)压测工具

    在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请 ...

  3. 【Database】MySQL实战45讲

    01 | 基础架构:一条SQL查询语句是如何执行的? 1. MySQL 的基本架构图: MySQL可以分成: Server层 和 存储引擎层 两部分. Server层:包含连接器.查询缓存.分析器.优 ...

  4. 1、selenium 8大元素定位方式

    元素定位方式: id name css class_name tag_name partial_link link_text : driver. find_element_by_link_text(& ...

  5. JavaSE---Runtime类

    1.概述 1.1 Runtime类  代表 java程序运行时环境: 1.2 Runtime类  提供的类方法: getRuntime():获取Runtime实例: gc():通知垃圾回收器回收资源: ...

  6. Spring 讲解(一 )

    1.如何理解 Spring 框架 简单来说,Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. 因为以前写代码的时候,在使用类对象的时候,经常需要实例化创建(new 出来) ...

  7. js浮点解决

    function add(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch (f) ...

  8. Linq 使用Startswith 出现空引用的问题

    一.问题 我使用的是Entity Fromwork CodeFirst来操作数据库,昨天在使用startswith查询数据的时候发现一个问题,就是经常一直报空引用的错误,查了很久才找到原因,这里做一个 ...

  9. 低价购买 (动态规划,变种最长下降子序列(LIS))

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  10. LR之-参数化

    1.改变参数化主要在于select next now和update value on这个二个选项 sequential:顺序取值 random:随机取值 unique:唯一取值 same line a ...