Java Property类使用详解

作者:CS-Bob 时间:2023-11-06 21:52:57 

概念理解

Properties 继承于 Hashtable。表示一个持久的属性集,属性列表以key-value的形式存在,key和value都是字符串。Properties类被许多Java类使用。例如,在获取环境遍历时它就作为System.getProperties()方法的返回值。我们在很多需要避免硬编码的应用场景下需要使用Properties文件来加载程序需要配置的信息,比如JDBC、MyBatis框架等。Properties类则是Properties文件和程序的中间桥梁,不论是从properties文件读取信息还是写入信息到properties文件都要经由Properties类。

写入

Properties类调用setProperty方法将键值对保存到内存中,此时可以通过getProperty方法读取,propertyNames方法进行遍历,但是并没有将键值对持久化到属性文件中,故需要调用store方法持久化键值对到属性文件中。

我们写一个类测试


import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;
public class TestProperties {
public void writeProperties() {
Properties properties = new Properties();
OutputStream output = null;
try {
output = new FileOutputStream("config.properties");
properties.setProperty("url", "jdbc:mysql://localhost:3306/");
properties.setProperty("username", "root");
properties.setProperty("password", "root");
properties.setProperty("databases", "music_player");
properties.store(output, "Steven1997 modify" + new Date().toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
if(output!=null) {
try {
output.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
TestProperties t = new TestProperties();
t.writeProperties();
}
}

执行后,工程下面会出现一个config.properties文件,属性文件内容如下:

Java Property类使用详解

读取

使用getProperty获取config.properties文件配置文件的各项属性。


package property;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class LoadProperties {
public void loadProperties() {
Properties properties = new Properties();
InputStream inputStream = null;
try {
inputStream = new FileInputStream("config.properties");
properties.load(inputStream);
System.out.println("url:" + properties.getProperty("url"));
System.out.println("username:" + properties.getProperty("username"));
System.out.println("password:" + properties.getProperty("password"));
System.out.println("database:" + properties.getProperty("database"));
} catch (IOException e) {
e.printStackTrace();
}finally {
if(inputStream !=null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
LoadProperties l = new LoadProperties();
l.loadProperties();
}
}

运行后的结果

url:jdbc:mysql://localhost:3306/
username:root
password:root
database:music_player

遍历

遍历属性文件中的键值对


package property;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
public class PropertiesTest {
public void printAll() {
Properties prop = new Properties();
InputStream input = null;
try {
String file = "config.properties";
input = getClass().getClassLoader().getResourceAsStream(file);
if(input == null) {
System.out.println("无法加载文件" + file);
return ;
}
prop.load(input);
// 方法一
Set<Object> keys = prop.keySet();
for(Object key:keys) {
System.out.println("key:" + key.toString() + "|" + "value:" + prop.get(key));
}
//方法二:
Set<Entry<Object, Object>> entrys =prop.entrySet();//返回的属性键值对实体
for(Entry<Object, Object> entry:entrys){
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
}
//方法三:
Enumeration<?> e = prop.propertyNames();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
String value = prop.getProperty(key);
System.out.println("Key:" + key + ",Value:" + value);
}
}catch (Exception e) {
e.printStackTrace();
}finally {
if(input != null) {
try {
input.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
PropertiesTest p = new PropertiesTest();
p.printAll();
}
}

运行结果如下:

key:url|value:jdbc:mysql://localhost:3306/
key:password|value:root
key:database|value:music_player
key:username|value:root
key:url,value:jdbc:mysql://localhost:3306/
key:password,value:root
key:database,value:music_player
key:username,value:root
Key:password,Value:root
Key:url,Value:jdbc:mysql://localhost:3306/
Key:database,Value:music_player
Key:username,Value:root

 properties文件默认的编码格式居然是ISO-8859-1,这样导致往配置文件里面写入中文的时候转换成另一种格式的编码,需要把properties 文件的编码格式改为UTF-8,这样才会让配置文件保存中文数据的时候不会出现转码的问题

以上所述是小编给大家介绍的Java Property类使用详解整合,希望对大家有所帮助。

来源:https://blog.csdn.net/bo123_/article/details/89059799

标签:Java,Property
0
投稿

猜你喜欢

  • unity 切换场景不销毁物体问题的解决

    2022-04-29 11:26:06
  • Unity3D使用UGUI开发原生虚拟摇杆

    2021-10-04 17:28:26
  • 使用Java开发实现OAuth安全认证的应用

    2023-07-16 13:55:44
  • C#中foreach循环对比for循环的优势和劣势

    2021-12-29 23:50:59
  • java多线程的同步方法实例代码

    2022-02-16 19:30:47
  • c# WinForm制作图片编辑工具(图像拖动、缩放、旋转、抠图)

    2022-05-20 12:32:40
  • C#中的IEnumerable接口深入研究

    2022-04-06 11:13:42
  • Android 登录处理简单实例(源码下载)

    2023-06-22 11:44:43
  • Kotlin如何直接使用控件ID原理详析

    2022-05-01 16:45:42
  • C语言内存操作函数详解

    2021-09-01 01:50:36
  • python调用java的jar包方法

    2023-06-23 21:54:24
  • java 中 System.out.println()和System.out.write()的区别

    2021-09-17 04:30:52
  • Android实现取消GridView中Item选中时默认的背景色

    2023-02-26 05:53:30
  • Mybatis映射文件实例详解

    2023-06-12 13:08:42
  • 100-200之间所有素数求和程序代码(二个版本)

    2022-07-03 18:53:58
  • 一篇文章带你初步认识Maven

    2023-08-31 01:56:14
  • Android Activity的启动过程源码解析

    2023-12-25 11:16:00
  • Java设计模式七大原则之单一职责原则详解

    2022-05-12 20:48:58
  • 深入java内存查看与分析详解

    2021-06-14 06:48:45
  • C#路径,文件,目录及IO常见操作汇总

    2022-05-03 21:21:13
  • asp之家 软件编程 m.aspxhome.com