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. Nginx有哪些作用?

    Nginx有哪些作用? http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡   什么是正向代理? 正向代理,意思是一个位于客户端和原始服务器(origin server)之 ...

  2. 【串线篇】SpringMvc源码分析

    一.DispathcherServlet结构分析 1).所有请求过来DispatcherServlet收到请求, 2).调用doDispatch()方法进行处理 1).getHandler():根据当 ...

  3. Python的return语句中使用条件判断

    if end1 <= val <= end2 or end2 <= val <= end1: return True else: return False 等于 return ...

  4. 负载均衡中间件(一)Nginx高性能负载均衡器

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/PO3)代理服务器,并在一个BSD协议下发行,可以在UNIX.GNU/Linux.BSD.Mac OS X.Solaris,以 ...

  5. Codeforces #55D (数位dp+离散化)

    Description Volodya is an odd boy and his taste is strange as well. It seems to him that a positive ...

  6. 【PowerOJ1740&网络流24题】圆桌聚餐(最大流)

    题意: 来自n个不同国家的代表开会,每个国家代表数为ci 会场有m张圆桌,每张桌子可容纳mi人 不希望有同一个国家的代表在同一张桌子上就餐 设计一个合法方案 (n,m<=300) 思路:最大流, ...

  7. 外部表及oracle数据库内存

    create table alert1 (log varchar2(1000))2 organization external3 (type oracle_loader4 default direct ...

  8. navicat连接登录windows10本地wsl的数据库

    1.修改MySql的配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 将找到 bind-address = 127.0.0.1 并注释掉 → # bin ...

  9. 89、tensorflow使用GPU并行计算

    ''' Created on May 25, 2017 @author: p0079482 ''' # 分布式深度学习模型训练模式 # 在一台机器的多个GPU上并行训练深度学习模型 from date ...

  10. Linux中的特殊权限s、t、i、a

    文件权限除了r.w.x外还有s.t.i.a权限:s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行.在设置s权限时文件属主.属组必须先设置相应的x权限,否则s权限并不能 ...