网站首页 > 技术文章 正文
Properties(java.util.Properties)类,跟Map的key和value都为String类型比较相似,Properties类可以将 c key和 value键值对写道磁盘的properties文件中,然后可以再次读出来。本文讲述 Properties常用的机制。
创建Properties实例
为了使用Properties类,则必须使用Properties的实例,可以通过构造函数创建:
Properties properties = new Properties();
设置Properties
可以通过setProperty()方法设置property (key - value):
properties.setProperty("email", "john@doe.com");
设置了email为john@doe.com。
获取Properties
可以通过getProperty()获取对应key的值:
String email = properties.getProperty("email");
移除Properties
可以通过remove()方法移除指定的键值对,参数是key:
properties.remove("email");
迭代Properties
可以通过key迭代Properties :
Properties properties = new Properties();
properties.setProperty("key1", "value1");
properties.setProperty("key2", "value2");
properties.setProperty("key3", "value3");
Iterator keyIterator = properties.keySet().iterator();
while(keyIterator.hasNext()){
String key = (String) keyIterator.next();
String value = properties.getProperty(key);
System.out.println(key + " = " + value );
}
上面例子输出结果:
key1 = value1
key2 = value2
key3 = value3
存储Properties到文件
可以通过store()方法将Properties的key-value存储到Properties文件中并且可以读出来:
Properties properties = new Properties();
properties.setProperty("property1", "value1");
properties.setProperty("property2", "value2");
properties.setProperty("property3", "value3");
try(FileWriter output = new FileWriter("data/props.properties")){
properties.store(output, "These are properties");
} catch (IOException e) {
e.printStackTrace();
}
Property文件编码
Properties文件的默认代码ISO-8859-1(Latin-1),然而我们常用的是 UTF-8编码,可以通过FileWriter构造函数的第二个参数指定具体的编码格式:
try(FileWriter output = new FileWriter("data/props.properties", Charset.forName("UTF-8"))){
properties.store(output, "These are properties");
} catch (IOException e) {
e.printStackTrace();
}
Property文件格式
Properties文件中每一行的格式是key=value:
#These are properties
#Thu Jul 04 21:29:20 CEST 2019
property2=value2
property1=value1
property3=value3
#开头的是注释。
加载文件的数据到Properties
可以通过Properties的load() 方法将文件的数据加载到Properties:
Properties properties = new Properties();
try(FileReader fileReader = new FileReader("data/props.properties")){
properties.load(fileReader);
} catch (IOException e) {
e.printStackTrace();
}
加载Properties文件指定编码
load()默认加载编码是ISO-8859-1 (Latin-1),如果需要使用其他格式,例如UTF-8,可以在使用 FileReader的第二个参数指定 UTF-8加载文件:
try(FileReader fileReader = new FileReader("data/props.properties", Charset.forName("UTF-8"))){
properties.load(fileReader);
} catch (IOException e) {
e.printStackTrace();
}
存储Properties中的数据到XML文件
Properties同样可以把数据存储到XML,调用storeToXML()方法:
Properties properties = new Properties();
properties.setProperty("property1", "value1");
properties.setProperty("property2", "value2");
properties.setProperty("property3", "value3");
try(FileOutputStream output = new FileOutputStream("data/props.xml")){
properties.storeToXML(output, "These are properties");
} catch (IOException e) {
e.printStackTrace();
}
Property XML文件编码
Properties XML property 文件默认的编码UTF-8,如果需要使用其他编码格式则使用第三个参数例如ISO-8859-1:
try(FileOutputStream output = new FileOutputStream("data/props.xml")){
properties.storeToXML(output, "These are properties", Charset.forName("ISO-8859-1"));
} catch (IOException e) {
e.printStackTrace();
}
XML Property文件格式
Properties对象存储到 XML文件格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>These are properties</comment>
<entry key="property2">value2</entry>
<entry key="property1">value1</entry>
<entry key="property3">value3</entry>
</properties>
请注意传递给storeToXML()方法的注释comment元素 是如何包含在注释XML元素中的,而不是包含在XML注释(<!-- -->) 。
从XML文件中加载到Properties
可以通过 Properties的loadFromXML()方法从xml文件中获取数据:
Properties properties = new Properties();
try(FileInputStream fileInputStream = new FileInputStream("data/props.xml")){
properties.loadFromXML(fileInputStream);
} catch(IOException e){
e.printStackTrace();
}
指定编码从XML中加载数据到Properties
默认loadFromXML() 方法加载XML文件的编码格式是UTF-8 ,注意,这与非XML属性文件的默认值相反,如果XML文件使用不同的编码,例如ISO-8859-1(Latin-1),则XML文件必须指定其中的编码。这是通过将以下行作为XML属性文件的第一行来实现的:
<?xml version="1.0" encoding="ISO-8859-1"?>
从Classpath 路径下加载Properties
可以加载classpath 下的properties数据到Properties, 因此,该文件可以与加载属性的应用程序位于同一个JAR文件中,或者在Java应用程序执行时位于Java类路径上的另一个JAR文件或目录中。要从类路径上可用的文件加载属性,需要首先获取类实例:
Class aClass = PropertiesExample.class;
一旦有了Class实例可以通过 getResourceAsStream() 方法返回InputStream:
InputStream inputStream =
aClass.getResourceAsStream("/myProperties.properties");
文件必须位于classpath的根目录下,如果需要加载子目录下的文件,需要这样/subdir/myProperties.properties 。
使用InputStream 把文件数据加载到Properties实例中,可以使用load() 或者loadFromXML()方法:
Class aClass = PropertiesExample.class;
InputStream inputStream =
aClass.getResourceAsStream("/myProperties.properties");
Properties fromClasspath = new Properties();
try {
fromClasspath.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
ResourceBundle Properties
Java中包含一个特殊类型的-ResourceBundle,ResourceBundle是一个文件包,它们一起构成一个bundle。通常,每个文件都包含一组针对特定语言的属性。因此,每个文件通常都包含相同的属性键集,但其值特定于该文件所针对的语言。ResourceBundle属性文件通常从classpath加载。ResourceBundle是国际化应用程序的常用方法。
默认Properties
Java Properties类能够为没有在Properties实例中注册任何键的属性提供默认属性值。有两种使用默认属性值的方法:
- 为getProperty()方法提供默认的值
- 创建Properties 实例时,提供包含默认值的Properties
getProperty()的默认值
getProperty()有个重载方法可以给定指定的默认值:
Properties properties = new Properties();
String preferredLanguage =
properties.getProperty("preferredLanguage", "Danish");
如果 Properties实例中不包括key为preferredLanguage的实例,那么将返回Danish 。
使用默认的Properties实例作为默认值
Java Properties类可以用另一个Properties实例实例化,该实例包含在新创建的Properties实例不包含请求的属性键的值时要使用的默认值:
Properties defaultProperties = new Properties();
defaultProperties.setProperty("preferredLanguage", "Danish");
Properties newProperties = new Properties(defaultProperties);
String language = newProperties.getProperty("preferredLanguage");
System.out.println("Preferred language: " + language);
在newProperties实例中我们没有设置preferredLanguage 的值,那么将取 defaultProperties中对应的preferredLanguage 的值。 f
系统Properties
System Properties 是Property的一个特殊实例:
Properties systemProperties = System.getProperties();
可以通过 System.getProperty() 获取值和 System.setProperty() 设置值:
System.setProperty("key1", "value1");
String value1 = System.getProperty("key1");
//The above is equal to:
Properties systemProperties = System.getProperties();
systemProperties.setProperty("key1", "value1");
String value1 = systemProperties.getProperty("key1");
通过系统命令设置System Properties
启动项目时可以通过-D参数设置System properties:
java -Dkey1=value -cp . com.jenkov.MyApp
设置System property 名称key1和值 value1.
获取key1是这样:
String key1Property = System.getProperty("key1");
参考:http://tutorials.jenkov.com/java-collections/properties.html
http://tutorials.jenkov.com/unicode/utf-8.html
https://blog.csdn.net/cgsyck/article/details/108449964
猜你喜欢
- 2025-01-29 java高级用法之:无所不能的java,本地方法调用实况
- 2025-01-29 Java 动态调试技术原理及实践(java动态配置)
- 2025-01-29 我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊
- 2025-01-29 Java开发环境搭建(Java开发环境搭建与基础语法的实验结果与总结)
- 2025-01-29 Python系列--正则表达式,读这一篇就够了
- 2025-01-29 强引用、软引用、弱引用、幻象引用有什么区别?有哪些使用场景?
- 2025-01-29 当老板让我从 Java8 升到 Java11(升级java)
- 2025-01-29 JAVA并发-Future(java并发问题解决)
- 2025-01-29 Java多线程实战|CyclicBarrier原理介绍及使用场景
- 2025-01-29 这才是Java基础知识点的总结(java基础知识总结 超详细)
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)