Java Property类使用详解

 更新时间:2019年04月08日 09:12:26   作者:CS-Bob  
这篇文章主要介绍了Java Property类使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

概念理解

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文件,属性文件内容如下:

读取

使用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类使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • SpringBoot实现接口参数加密解密的示例代码

    SpringBoot实现接口参数加密解密的示例代码

    加密解密本身并不是难事,问题是在何时去处理?SpringMVC 中给我们提供了 ResponseBodyAdvice 和 RequestBodyAdvice,利用这两个工具可以对请求和响应进行预处理,非常方便。废话不多说,我们一起来学习一下
    2022-09-09
  • SpringBoot项目导入aliyun oss starter依赖后启动报错问题

    SpringBoot项目导入aliyun oss starter依赖后启动报错问题

    这篇文章主要介绍了SpringBoot项目导入aliyun oss starter依赖后启动报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java线程池submit阻塞获取结果的实现原理详解

    Java线程池submit阻塞获取结果的实现原理详解

    Java线程池中提交任务运行,通常使用execute()方法就足够了。那如果想要实现在主线程中阻塞获取线程池任务运行的结果,该怎么办呢?本文就来和大家一起讨论讨论
    2022-10-10
  • SpringMVC实战案例RESTFul实现添加功能

    SpringMVC实战案例RESTFul实现添加功能

    这篇文章主要为大家介绍了SpringMVC实战案例RESTFul实现添加功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • MyBatis中正则使用foreach拼接字符串

    MyBatis中正则使用foreach拼接字符串

    这篇文章主要介绍了MyBatis中正则使用foreach拼接字符串,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 实例详解SpringBoot默认的JSON解析方案

    实例详解SpringBoot默认的JSON解析方案

    JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,下面这篇文章主要给大家介绍了关于SpringBoot默认的JSON解析方案的相关资料,需要的朋友可以参考下
    2021-08-08
  • Java基础之选择结构与循环结构

    Java基础之选择结构与循环结构

    这篇文章主要介绍了Java基础之选择结构与循环结构,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java实现简单员工管理系统

    Java实现简单员工管理系统

    这篇文章主要为大家详细介绍了Java实现简单员工管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 使用DevOps开源利器开发部署Hygieia平台

    使用DevOps开源利器开发部署Hygieia平台

    这篇文章主要为大家介绍了使用DevOps开源利器开发部署Hygieia平台的实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职 加薪
    2022-03-03
  • Eclipse Jetty server漏洞解决办法

    Eclipse Jetty server漏洞解决办法

    最近给⼀个客户部署项⽬,但是客户的安全稽核有点变态,居然说 Eclipse Jetty Server⾼危漏洞,这篇文章主要给大家介绍了关于Eclipse Jetty server漏洞解决的相关资料,需要的朋友可以参考下
    2023-11-11

最新评论