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


猜你喜欢
- ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大
- 当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行、执行进度如何、应用程序是否遇到错误终止等,这时需要使用进
- 线程池类图我们最常使用的Executors实现创建线程池使用线程主要是用上述类图中提供的类。在上边的类图中,包含了一个Executor框架,
- 详解java中的PropertyChangeSupport与PropertyChangeListenerjava中的PropertyChan
- 本文实例讲述了Android仿微信语音聊天功能代码。分享给大家供大家参考。具体如下:项目效果如下:具体代码如下:AudioManager.j
- 事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道win
- 所谓动态折线图,就是折线图能随着手指的滑动进行动态绘制,这里很定会产生动画效果。基于这个效果,这里使用SurfaceView进行制图。实现步
- 本文实例为大家分享了C# this关键字的四种用法,供大家参考,具体内容如下用法一 this代表当前实例,用this.显式调用一
- 前言Android中类加载器有BootClassLoader,URLClassLoader,PathClassLoader,DexClass
- 本文实例讲述了Android编程使用android-support-design实现MD风格对话框功能。分享给大家供大家参考,具体如下:首先
- 1)在我们的项目中添加引用文件:TaskSchedulerEngine.dll(dll定义了一个ITask接口,定义了两个方法Initial
- eclipse的代码提交到git,下载后用新的ide工具IJ 进行开发一、导入项目eclipse里有workSpace 但是在IDEA中没有
- 一、背景动态插件化编程是一件很酷的事情,能实现业务功能的 解耦 便于维护,另外也可以提升 可扩展性 随时可以在不停服务器的情况下扩展功能,也
- C#的MVC寻找对应的控制器首先是寻找当前域的如果找不到就会寻找备用的..但是有些时候我们是不想他去寻找备用的控制器.这里就涉及到了一个Da
- 前言:本人目前从事java开发,但同时也在学习各种前端技术,下面是我做的一个前后端分离项目的一个小案例,不足之处请多多指教1. 项目技术选型
- 本文实例讲述了Java+Ajax实现的用户名重复检验功能。分享给大家供大家参考,具体如下:今天,我来教大家怎么实现Java+Ajax实现用户
- 目录一、抽象类1.抽象类概述1.1 为什么要有抽象类?(抽象类的作用)1.2 抽象类的定义2. 抽象类特点3.抽象类成员特点4.抽象类案例二
- 在Controller层时,往往会需要校验或验证某些操作,而在每个Controller写重复代码,工作量比较大,这里在Springboot项
- 前言Compose的动画Api用起来很简单,效果看起来很神奇,那么它内部到底是如何运转的呢?使用动画的代码示例:var isOffset b
- 本文实例讲述了C#使用iTextSharp设置PDF所有页面背景图功能的方法。分享给大家供大家参考。具体如下:在生成PDF 的时候,虽然可以