72.Properties(配置文件)
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(配置文件)的更多相关文章
- 读取.properties配置文件
方法1 public class SSOUtils { protected static String URL_LOGIN = "/uas/service/api/login/info&q ...
- java读取properties配置文件总结
java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1) ...
- properties 配置文件中值换行的问题
在使用properties配置文件的时候我们经常碰到如下两个问题 1:当a=b中的b值内容特别长的时候为了阅读方便我们手动换行,但如果我们直接回车那么后面的数据就会丢失.那如何解决呢? 例如: a=a ...
- properties配置文件的读取和写入
/** * 类名:PropertiesUtil * 功能:提供对properties配置文件的读取和写入 * @author ChengTao */package com.xy.xyd.rest.bi ...
- java读取properties配置文件方法(一)
为了修改项目参数方便,需要使用properties配置文件: 首先是需要三个jar包(不同的jar包,读取配置文件的方式会有所不同,这里使用的是2.6版本的jar包) commons configur ...
- java 顺序 读写 Properties 配置文件
java 顺序 读写 Properties 配置文件 支持中文 不乱码 java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不 ...
- jdbc基础 (二) 通过properties配置文件连接数据库
csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...
- Java 获取*.properties配置文件中的内容 ,常见的两种方法
import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...
- Java读取Properties配置文件
1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集.不过Properties的键和值都是字符串 ...
随机推荐
- 10.ThreadLocal
/** * - void set(Object value)设置当前线程的线程局部变量的值. * - public Object get()该方法返回当前线程所对应的线程局部变量. * - publi ...
- STM点滴一
就就是你用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险.也就不需要关闭中断. This way, there is no risk that an IRQ occurs between ...
- C#中using语句是什么意思
使用using语句最终生成的其实是一个try, finally代码块,在finally代码块里释放资源.要求是:为 using 语句提供的对象必须实现 IDisposable 接口.此接口提供了 Di ...
- Zip函数(Python)
>>> z = zip((2,3,4),(33,44,55)) >>> z <zip object at 0x1022cdb88> >>&g ...
- php ceil()函数 语法
php ceil()函数 语法 ceil()函数怎么用? php ceil()函数的作用是向上舍入为最接近的整数,语法是ceil(number),表示返回不小于参数X的下一个整数,如果没有小数,返回参 ...
- 洛谷P2786 英语1(eng1)- 英语作文
题目背景 蒟蒻HansBug在英语考场上,挠了无数次的头,可脑子里还是一片空白. 题目描述 眼下出现在HansBug蒟蒻面前的是一篇英语作文,然而智商捉急的HansBug已经草草写完了,此时 他发现离 ...
- hdu1059&poj1014 Dividing (dp,多重背包的二分优化)
Problem Description Marsha and Bill own a collection of marbles. They want to split the collection a ...
- Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测
Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测,并实践了健康检查在 Scale Up 和 Rolling Update 场景中的应用.kubelet使用启 ...
- implements Serializable有什么作用
转自 http://blog.csdn.net/dinghqalex/article/details/46009911
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡(高斯消元+期望dp)
传送门 解题思路 设\(f(x)\)表示到\(x\)这个点的期望次数,那么转移方程为\(f(x)=\sum\frac{f(u)*(1 - \frac{p}{q})}{deg(u)}\),其中\(u\) ...