properties配置文件读取操作总结【java笔记】
声明:本文所有例子中的 properties 文件均放在 src 目录下,ecclipse 软件自动增加
一、基本概念
1.1
properties文件,存储格式 键=值。
properties文件特点:
1、键值对格式
2、“ = ”等号后面,值前面,的空格,会自动忽略掉
3、值后面的空格,不会忽略
4、“ = ”等号后面的双引号,不会忽略
5、“ # ”井号后面内容,为注释,忽略
1.2 Java的 Properties 类 属性映射(property map)
是一种存储键/值对的数据结构。属性映射经常被用来存放配置信息。
它有三个特性:
1. 键和值斗志字符串
2. 键/值对可以很容易地写入文件或从文件读出
3. 用二级表存放默认值
实现属性映射的Java类被称为 Properties(Java.util.Properties),此类是Java中比较重要的类,
主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,
这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置,提高程序的可扩展性。
此类是线程安全的:多个线程可以共享单个 Properties 对象而无需进行外部同步。
构造方法:
- Properties() 创建一个无默认值的空属性列表。
- Properties( Properties defaults ) 创建一个带有指定默认值的空属性列表。
它提供了几个主要的方法:
getProperty ( String key):用指定的键在此属性列表中搜索属性。也就是通过参数 key ,得到 key 所对应的 value。
load ( InputStream inStream):从输入流中读取属性列表(键和元素对)。通过对指定的文件(比如说上面的 test.properties 文件)进行装载来获取该文件中的所有键 - 值对。以供 getProperty ( String key) 来搜索。
setProperty ( String key, String value) :底层调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键 - 值对。
store ( OutputStream out, String comments):以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。与 load 方法相反,该方法将键 - 值对写入到指定的文件中去。
clear ():清除所有装载的 键 - 值对。该方法在基类中提供。
注意:因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。相反,应该使用 setProperty 方法。
如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。
类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败。
二、Java读取Properties文件的方法
2.1 Java虚拟机(JVM)有自己的系统配置文件(system.properties)
//获取JVM的系统属性
import java.util.Properties;
public class ReadJVM {
public static void main(String[] args) {
Properties pps = System.getProperties();
pps.list(System.out);
}
}
2.2 使用 J2SE API 读取 Properties 文件的六种方法
方法一:java.util.Properties类的 load() 方法
InputStream in = new BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();
p.load(in);
/**
* 注意:配置文件一定要放到项目的根目录。
*/
@Test
public void run1() {
try {
FileInputStream is = new FileInputStream("src/my-ini.properties");
Properties pop = new Properties();
try {
pop.load(is);
} catch (IOException e) {
e.printStackTrace();
}
Enumeration em = pop.propertyNames();
while(em.hasMoreElements()) {
String key = (String) em.nextElement();
String value = pop.getProperty(key);
System.out.println(key+"="+value);
} } catch (FileNotFoundException e) {
e.printStackTrace();
}
}
方法二:使用class变量的getResourceAsStream()方法
InputStream in = JProperties.class.getResourceAsStream(name);
Properties p = new Properties();
p.load(in);
/**
* 注意:配置文件一定要放到当前目录下。
* (目录层次也可以从src下面的文件夹开始但不必包含src,且不必包含反斜杠开头。)
* 本方法在 PropertiesDemo1 类中
*/
@Test
public void run2() {
Properties pop = new Properties();
try{
InputStream in = PropertiesDemo1.class.getResourceAsStream("/my-ini.properties");
pop.load(in);
}catch(Exception ex) {
ex.printStackTrace();
}
Enumeration em = pop.propertyNames();
while(em.hasMoreElements()) {
String key = (String) em.nextElement();
String value = pop.getProperty(key);
System.out.println(key+"="+value);
} }
方法三:使用 class.getClassLoader() 所得到的 java.lang.ClassLoader 的 getResourceAsStream() 方法
InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
Properties p = new Properties();
p.load(in);
/**
* 注意:
* 配置文件一定要放在 bin 目录下
* 注意 eclipse 软件自动将src中的配置文件复制到 bin 目录下
*/
@Test
public void run3() {
Properties pop = new Properties();
try{
InputStream in = PropertiesDemo1.class.getClassLoader().getResourceAsStream("my-ini.properties");
pop.load(in);
}catch(Exception ex) {
ex.printStackTrace();
}
Enumeration em = pop.propertyNames();
while(em.hasMoreElements()) {
String key = (String) em.nextElement();
String value = pop.getProperty(key);
System.out.println(key+"="+value);
}
}
方法四:使用 java.lang.ClassLoader 类的 getSystemResourceAsStream() 静态方法
InputStream in = ClassLoader.getSystemResourceAsStream(name);
Properties p = new Properties();
p.load(in);
/**
* 注意:
* 配置文件一定要放在 bin 目录下
*/
@Test
public void run4() {
Properties pop = new Properties();
try{
InputStream in = ClassLoader.getSystemResourceAsStream("my-ini.properties");
pop.load(in);
}catch(Exception ex) {
ex.printStackTrace();
}
Enumeration em = pop.propertyNames();
while(em.hasMoreElements()) {
String key = (String) em.nextElement();
String value = pop.getProperty(key);
System.out.println(key+"="+value);
}
}
方法五:使用 java.util.ResourceBundle 类的 getBundle() 方法
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());
/**
* 注意:
* 配置文件一定要放在 bin 目录下
*/
@Test
public void run5() {
ResourceBundle rs = ResourceBundle.getBundle("my-ini"); String driver = rs.getString("driver");
String url = rs.getString("url");
String user = rs.getString("user");
String password = rs.getString("password"); System.out.println("driver="+driver);
System.out.println("url="+url);
System.out.println("user="+user);
System.out.println("password="+password);
}
方法六:使用 java.util.PropertyResourceBundle 类的构造函数
@Test
public void run6() {
File file = new File("src/my-ini.properties");
try {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
try {
PropertyResourceBundle prb = new PropertyResourceBundle(in); String driver = prb.getString("driver");
String url = prb.getString("url");
String user = prb.getString("user");
String password = prb.getString("password"); System.out.println("driver="+driver);
System.out.println("url="+url);
System.out.println("user="+user);
System.out.println("password="+password);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
引用博文:
JAVA操作properties配置文件——总结(Locale&ResourceBundle& PropertyResourceBundle(http://blog.csdn.net/fanxiaobin577328725/article/details/52071310)
properties配置文件读取操作总结【java笔记】的更多相关文章
- @Value和@PropertySource实现*.properties配置文件读取过程和实现原理
@Value和@PropertySource实现*.properties 配置文件读取过程和实现原理 1 配置使用步骤 (1)右击resource目录添加*.prooerties配置文件
- Java中Properties配置文件读取
以下实践的是Properties配置文件的基本操作方法.像spring使用xml做依赖注入时,这个配置文件起到非常实用的作用. 一.格式规范 参考wiki百科的格式简介:https://zh.wiki ...
- 使用Properties配置文件 InputStream与FileReader (java)
java 开发中,常常通过流读取的方式获取 配置文件数据,我们习惯使用properties文件,使用此文件需要注意 文件位置:任意,建议src下 文件名称:任意,扩展名为properties 文件内容 ...
- Spring Boot的properties配置文件读取
我在自己写点东西玩的时候需要读配置文件,又不想引包,于是打算扣点Spring Boot读取配置文件的代码出来,当然只是读配置文件没必要这么麻烦,不过反正闲着也是闲着,扣着玩了.具体启动过程以前的博客写 ...
- properties配置文件读取
1.配置文件test.properties: test_123=admin 注:value 可用单引号,双引号,不用引号修饰 2.工具类PropertiesUtil: package com..... ...
- Java之properties文件读取
1.工程结构 2.ConfigFileTest.java package com.configfile; import java.io.IOException; import java.io.Inpu ...
- 集合类——Map集合、Properties属性文件操作
1.Map集合 Collection集合的特点是每次进行单个对象的保存,若要对一对对象来进行保存就只能用Map集合来保存.即Map集合中一次可以保存两个对象,且这两个对象的关系是key = value ...
- .Net Core配置文件读取整理
一 .配置文件说明 1.配置,主要是 指在程序中使用的一些特殊参数,并且大多数 仅在程序启动的之后指定不需要修改. 2.在以前.Net项目中配置文件主要指app.config或web.config,但 ...
- Java配置文件Properties的读取、写入与更新操作
/** * 实现对Java配置文件Properties的读取.写入与更新操作 */ package test; import java.io.BufferedInputStream; import j ...
随机推荐
- CF741C.Arpa’s overnight party and Mehrdad’s silent entering [构造 二分图染色]
CF741C - Arpa's overnight party and Mehrdad's silent entering 题意: 有 n 对情侣坐成一个圈,有两种食物Kooft and Zahre- ...
- RSP小组——团队冲刺博客六
RSP小组--团队冲刺博客六 冲刺日期:2018年12月18日 前言 各成员今日(12.18)完成的任务 李闻洲,赵乾宸代码合并 马瑞蕃图形后续支持,编写博客,燃尽图 蒋子行会议记录 各个成员的任务安 ...
- BZOJ5465 : [APIO 2018] 选圆圈
假设最大的圆半径为$R$,以$2R$为大小将地图划分为一个个格子,那么每个圆只需要检查圆心在附近$9$个格子内部的所有圆. 在当前圆的半径不足$\frac{R}{2}$时重构网格,那么最多重构$O(\ ...
- BZOJ 4455
树的点到图的点是双射 枚举哪些点可以映射到 然后dp容斥 复杂度 $2^n*n^3$ #include<bits/stdc++.h> using namespace std; #defin ...
- deepin 开机进入 initramfs,无法开机
原因 这个问题多是由于不正常关机造成文件系统出问题导致的 解决 fsck -t ext4 /dev/sda6 这个命令用于修复磁盘,一直选择y即可. 如果sda6 不行就换位sda1 再试. 执行完后 ...
- Docker容器跨主机通信
默认情况下Docker容器需要跨主机通信两个主机节点都需要在同一个网段下,这时只要两个Docker容器的宿主机能相互通信并且该容器使用net网络模式,改实现方式为网桥模式通信: 除此之外我们还可以通过 ...
- vue 图片预览插件
https://github.com/daidaitu1314/vue2-preview //cnpm cnpm install vue2-preview -save //引入 import VueP ...
- SEED实验——return-to-libc实验
实验概述 本实验的学习目标是让学生获得缓冲区溢出攻击的一种有趣变体——return-to-libc攻击实验的亲身体验.这种攻击可以绕过目前在主要linux操作系统中实现的现有保护方案.利用缓冲区溢出漏 ...
- 马哥k8s
https://pan.baidu.com/s/1BAX-j54bLcmWF-0ei-c-pw 31y6
- vue项目实践-添加express-mockjs进行数据模拟
mock-server 在新项目开始的时候,后端框架还没有,前端就有能够自己操作的模拟数据的服务是可以有的 express-mockjs 是楼教主结合 express+mock-lite 造的一个轮子 ...