详谈Java中Properties配置类怎么用

这篇具有很好参考价值的文章主要介绍了详谈Java中Properties配置类怎么用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将为大家详细讲解Java中Properties配置类怎么用,这是我们进行开发时经常用到的知识点,也是大家在学习Java中很重要的一个知识点,更是我们在面试时有可能会问到的问题!

文章较长,干货满满,建议大家收藏慢慢学习。文末有本文重点总结,主页有全系列文章分享。技术类问题,欢迎大家和我们一起交流讨论!

前言

在前面的几篇文章中,给大家讲解了Java里的List、Set和Map等集合

所以现在我们知道,Map集合作为一个双列集合,有keyvalue两个值,这两个值共同组成了key-value键值对的映射关系。而正是这种映射关系,使得Map集合可以解决我们在开发时遇到的配置文件问题。

所谓的配置文件问题,是指我们在开发时,经常需要读取和修改一些配置信息,比如数据库、消息队列、Nginx、Web服务器等的配置。这些配置信息在测试环境、开发环境和线上环境里的值是不同的,我们经常需要在几种环境中反复地修改配置信息。为了便于修改这些信息,我们可以采用Map集合来对这些信息进行封装和操作,尤其是给我们提供了一个Properties配置类,更是方便了我们的操作。那么今天,就给大家讲一下Properties配置类是怎么回事,以及怎么使用。


全文大约【3600】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考...

一. Properties简介

1. 概述

在Java开发中,我们经常需要读取和写入配置文件,用来存储程序中的一些配置信息,例如数据库的连接信息、邮件和Web服务器的信息、消息队列的信息等等。配置文件一般都是key-value形式,且它的key-value一般都是String-String类型的,因此我们完全可以用Map<String, String>来表示它。

但因为配置文件特别常用,所以Java集合库给我们提供了一个Properties类来表示一组“配置”,专门用来处理key-value形式的配置信息。Properties类可以表示一个持久的属性集,每个键及其对应的值都是字符串类型,它可以把配置信息保存在一个IO流中,或是从一个IO流中加载配置信息,因此很适合用来处理配置文件。

Properties的内部本质上是一个Hashtable,该类从Hashtable中继承了get()和put()方法,这些方法的参数签名是Object。但由于历史遗留原因,Properties的设计实际上是有问题的,不过为了保持兼容性,现在已经没法修改了。所以我们在使用Properties时,不要去调用这些从Hashtable继承来的方法,而应该使用Properties自身关于读写配置的方法,比如getProperty()和setProperty()等方法。

2. 配置文件

既然今天我们想利用Properties类来对配置文件进行读取,所以首先我们得认识一下什么是配置文件。在Java中,配置文件其实有多种格式,可以是 .txt、.xml、.properties、.yml、.json等格式,今天要给大家介绍的就是基于.properties格式的配置文件。

在Java中,其实默认的配置文件就是以.properties为扩展名的,该文件中的每行信息都是以key=value表示的,并用#进行注释。以下是一个典型的配置文件:

# db.properties

\#数据库的url
jdbc.url=jdbc:mysql://localhost:3306/mydb
\#用户名
jdbc.username=root
\#密码
jdbc.password=root

我们可以在eclipse等IDE工具中直接创建.properties文件,然后把上面的这些配置信息复制进去即可。

3. 常用方法

我们在使用Properties类读写配置文件时,常常会用到以下方法:

public synchronized void load(InputStream inStream) throws IOException
    
public synchronized void store(OutputStream out, String comments) throws IOException

其中,load()方法用于从指定的输入流中读取属性列表(键和元素对),store()方法用于将Properties中的键值对存储到指定的输出流中。

4. 读取步骤

在Java中利用Properties类读取配置文件的信息,一般要经历如下三步:

  1. 创建 Properties 实例;
  2. 调用 load()方法 读取配置文件;
  3. 调用 getProperty()方法 获取具体的配置信息。

了解了以上这些内容之后,接下来,会通过几个例子来给大家详细地介绍Properties的使用方法。

二. 读写Properties配置文件

首先我们通过一个案例,来学习如何读取Properties配置文件里的信息。

1. 创建Properties文件

为了方便测试,我们可以先在项目中创建一个.properties的配置文件。这里就把该配置文件命名为db.properties了,如下图所示:

详谈Java中Properties配置类怎么用

大家要注意,在早期的JDK中, .properties配置 文件采用了ASCII编码,具体来说是ISO8859-1编码。在这种编码中,如果文件中存在中文,这些中文必须使用user name=\u4e2d\u6587的形式来表示,非常别扭。而从JDK 9开始, .properties配置 文件就可以使用UTF-8编码了。

由于load(InputStream)方法默认总是以ASCII编码来读取字节流,所以会导致读取信息时产生乱码,我们可以使用另一个load(Reader)重载方法来读取:

Properties props = new Properties();
props.load(new FileReader("db.properties", StandardCharsets.UTF_8));

InputStream是字节流,Reader是字符流,因为字符流在内存中已经以char类型表示了,所以不涉及到编码问题。这样通过以上代码,我们就可以正常读取包含中文的配置信息了。

2. 读取Properties文件

2.1 加载配置文件

接下来我们可以使用Properties类的load()方法,来读取上面创建的配置文件,例如:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

public class Demo23 {
	public static void main(String[] args) {
		//创建Properties对象
		Properties properties = new Properties();
		try {
			//设置db.properties配置文件,利用字节流来加载文件
			
			//寻找.properties文件路径方式一
			//从当前项目的根目录下寻找db.properties文件
			URL url = Demo23.class.getResource("/db.properties");
			String path = url.getPath();
			System.out.println("path="+path);
			InputStream inputStream = new FileInputStream(path);
			
			//寻找.properties文件路径方式二
			//InputStream inputStream = Demo23.class.getResourceAsStream("/db.properties");
			
			//加载字节流
		    properties.load(inputStream);
		    System.out.println("properties="+properties);
		} catch (IOException e) {
		    e.printStackTrace();
		}
	}
}

在一个普通的Java项目中,如果我们想读取.properties配置文件,可以有两种方式:

  1. 类名.class.getResource("配置文件路径及名称") :该方式会得到一个URL对象,它代表了配置文件的路径;
  2. 类名.class.getResourceAsStream("配置文件路径及名称") :该方式会直接得到InputStream对象。

在上面的代码中,我们读取到了名为db.properties的配置文件,并将其存储在一个Properties对象中。

2.2 读取配置信息

在上面的代码中,我们从配置文件中读取了三个键值对,分别是jdbc.url、jdbc.usernamejdbc.password。在读取配置文件后,接下来我们就可以通过getProperty()方法来获取配置信息了。如果配置文件中不存在这些键,getProperty()方法将会返回null。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

public class Demo23 {
	public static void main(String[] args) {
		//创建Properties对象
		Properties properties = new Properties();
		try {
			//设置db.properties配置文件,利用字节流来加载文件
			
			//寻找.properties文件路径方式一
			//从当前项目的根目录下寻找db.properties文件
			URL dbUrl = Demo23.class.getResource("/db.properties");
			String path = dbUrl.getPath();
			System.out.println("path="+path);
			InputStream inputStream = new FileInputStream(path);
			
			//寻找.properties文件路径方式二
			//InputStream inputStream = Demo23.class.getResourceAsStream("/db.properties");
			
			//加载字节流
		    properties.load(inputStream);
		    System.out.println("properties="+properties);
		    
		    //从配置文件中根据指定的key来读取配置信息
		    String url = properties.getProperty("jdbc.url");
		    String username = properties.getProperty("jdbc.username");
		    String password = properties.getProperty("jdbc.password");
		    System.out.println("[url]="+url+" ,[username]="+username+" ,[password]="+password);
		} catch (IOException e) {
		    e.printStackTrace();
		}
	}
}

要注意,我们在调用 getProperty()方法 获取配置信息时,如果指定的key不存在,会返回 null 。但我们可以提供一个默认值,这样当key不存在时会返回一个默认值。 并且如果有多个.properties文件,可以反复调用load()读取,后读取的key-value会覆盖已读取的key-value。

2.3 使用默认值读取信息

在读取配置文件时,如果某个键不存在,getProperty()方法将返回null。为了避免出现NullPointerException,我们可以为getProperty()方法指定一个默认值,例如:

String url = properties.getProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb");
String username = properties.getProperty("jdbc.username", "root");
String password = properties.getProperty("jdbc.password", "root");

在以上代码中,如果配置文件中不存在jdbc.url这个键,getProperty方法会返回我们设置的默认值"jdbc:mysql://localhost:3306/mydb"。

3. 写入Properties文件

接下来我们再通过一个案例,来学习如何把配置信息写入到Properties文件里。

3.1 写入配置文件

我们可以使用Properties类的store方法来写入配置文件,例如:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;

public class Demo24 {
	public static void main(String[] args) {
		//设置配置信息
		Properties properties = new Properties();
		properties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb2");
		properties.setProperty("jdbc.username", "root");
		properties.setProperty("jdbc.password", "syc");

		try {
			URL dbUrl = Demo24.class.getResource("/db.properties");
			String path = dbUrl.getPath();
			System.out.println("path="+path);
			OutputStream outputStream = new FileOutputStream(path);
			//写入配置信息
			properties.store(outputStream, "Database connection properties");

			// 寻找.properties文件路径方式二
			InputStream inputStream = Demo24.class.getResourceAsStream("/db.properties");
			// 加载字节流
			properties.load(inputStream);
			System.out.println("properties=" + properties);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

以上代码中,将三个键值对写入到了名为db.properties的配置文件中,并添加了一行注释“Database connection properties”

3.2 使用默认值写入信息

另外在Properties类中,其实本身就有一个默认的Properties对象,可以用来设置一些默认属性值。我们可以使用Properties类的getDefaultProperties()方法来获取默认的Properties对象,然后使用setProperty()方法来设置默认属性值,例如:

Properties defaultProperties = Properties.getDefaultProperties();
defaultProperties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb");
defaultProperties.setProperty("jdbc.username", "root");
defaultProperties.setProperty("jdbc.password", "root");

Properties properties = new Properties(defaultProperties);

以上代码中,我们先获取了默认的Properties对象,然后设置了jdbc.url、jdbc.usernamejdbc.password三个默认属性值。接着,我们创建了一个新的Properties对象,并将默认的Properties对象传递给它。这样,在读取配置文件时,如果某个键不存在,getProperty方法就会先在当前Properties对象中查找,如果找不到,就会在默认Properties对象中查找。

四. 读写XML配置文件

其实Properties类不仅可以操作.properties配置文件,也可以操作.xml格式的文件,接下来再给大家讲一下如何操作xml文件。

1. 创建XML文件

首先我们来创建一个xml格式的配置文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明一个properties属性节点 -->
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
  <entry key="jdbc.url">jdbc:mysql://localhost:3306/mydb</entry>
  <entry key="jdbc.username">root</entry>
  <entry key="jdbc.password">root</entry>
</properties>

大家要注意,这里我们要使用<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">语句来声明一个properties根结点,大家可以根据自己的需要定义自己的节点名称。

2. 读取XML配置文件

要想读取XML格式的配置文件,可以使用loadFromXML()方法从XML文件中读取配置信息,例如:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Demo25 {
	public static void main(String[] args) {
		// 创建Properties对象
		Properties properties = new Properties();
		try {
			// 从当前项目的根目录下寻找db.properties文件
			InputStream inputStream = Demo25.class.getResourceAsStream("/config.xml");
			// 加载字节流,从XML文件中读取配置信息
			properties.loadFromXML(inputStream);

			// 从配置文件中根据指定的key来读取配置信息

			// 读取信息时设置默认值
			 String url = properties.getProperty("jdbc.url","jdbc:mysql://localhost:3306/mydb2");
			 String username = properties.getProperty("jdbc.username", "syc");
			 String password = properties.getProperty("jdbc.password", "syc");
			 System.out.println("[url]="+url+" ,[username]="+username+" ,[password]="+password);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

以上代码读取了名为config.xml的XML配置文件,并将其存储在一个Properties对象中。在读取XML格式的配置文件后,我们就可以通过getProperty方法来获取配置信息了。

3. 写入XML配置文件

同时,我们也可以使用storeToXML()方法,将Properties中的键值对信息存储到XML格式的输出流中,例如:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;

public class Demo26 {
	public static void main(String[] args) {
		// 设置配置信息
		Properties properties = new Properties();
		properties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb2");
		properties.setProperty("jdbc.username", "root");
		properties.setProperty("jdbc.password", "syc");

		try {
			URL dbUrl = Demo26.class.getResource("/config.xml");
			String path = dbUrl.getPath();
			OutputStream outputStream = new FileOutputStream(path);
			// 写入配置信息
			properties.storeToXML(outputStream, "Database connection properties");

			// 寻找.properties文件路径方式二
			InputStream inputStream = Demo26.class.getResourceAsStream("/config.xml");
			// 加载字节流
			properties.loadFromXML(inputStream);
			System.out.println("xml=" + properties);

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

在以上代码中,我们将三个键值对写入了一个名为config.xml的XML配置文件中,并添加了一行注释“Database connection properties”


五. 结语

在本文中,为大家详细介绍了Java中的Properties配置类,它是用来处理配置文件的一个实用工具类,该类可以从文件系统、classpath或其他任何地方读取.properties文件。我们在读写Properties时,注意仅使用getProperty()和setProperty()方法,不要调用继承而来的get()和put()等方法。

通过本文的介绍,相信大家已经掌握了Properties类的基本用法,包括读写配置文件、设置默认值、读写XML格式的配置文件等等。在实际开发中,我们可以结合Properties类来实现程序的配置功能,提高程序的灵活性和可维护性。

六、配套视频

视频教程:戳这里文章来源地址https://www.toymoban.com/news/detail-463187.html

到了这里,关于详谈Java中Properties配置类怎么用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • java-读取配置文件自定义字段(yml、properties)

    java-读取配置文件自定义字段(yml、properties)

    在springboot项目配置文件中设置自定义字段,项目代码按需读取,想换重要参数时直接更改配置文件即可,这篇文章说一说配置文件自定义字段的方法。 方法1 @Value 使用org.springframework.beans.factory.annotation包下的@Value注解读取yml文件里面的字段,代码如下: yml文件 读取 测试结果

    2024年02月08日
    浏览(14)
  • 第9章-第1节-关于Java中properties配置文件的介绍

    properties类也是基于流,不算很难,下面直接上代码: 关于工厂模式+反射+properties的案例,可以看这篇文件章:Java设计模式之工厂模式 本电子目录: 《Java基础的重点知识点全集》

    2024年01月20日
    浏览(12)
  • 教教大家wps怎么添加字体

    教教大家wps怎么添加字体

    在办公或者学习的过程中,经常需要制作wps文档,不过wps自带的字体种类比较少,我们要怎么在wps上添加想要的字体呢?下面就来看看详细的操作,非常简单。 wps字体库添加字体的方法 方法一:添加云字体 1、在“WPS”中,随意新建一个空白文档。 2、打开文档,在工具栏中

    2024年02月04日
    浏览(11)
  • 大家想知道ai写作宝怎么样吗?

    大家想知道ai写作宝怎么样吗?

    ai写作是指利用人工智能技术自动生成文章、报告、新闻等文本内容的过程。它可以实现大规模、高效率、低成本的文本创作,免去人工编写的繁琐过程,节约了很多时间和精力。目前在文学创作、新闻报道、广告文案、社交媒体内容创作等方面,ai写作都得到了广泛应用。那

    2024年02月12日
    浏览(13)
  • VMware配置环境(安装运行问题)及系列dns端口网络类型IP远程连接学习之(详谈8000字)

    VMware配置环境(安装运行问题)及系列dns端口网络类型IP远程连接学习之(详谈8000字)

    下载VMware安装包 在下载好VMware安装包之后双击运行 接受条款 关闭VMware自动更新 勾选快捷键方式 安装VMware安装 输入许可证(有需要私信小编) 安装完成 重启电脑即可 最终成功界面: 选择自定义 处理器容量为1 每个处理器的内核为1 内存不能小于1否则用不了 内存最少给 1G

    2024年04月16日
    浏览(14)
  • flv怎么转换成mp3?挑选三个方法给大家

    flv怎么转换成mp3?挑选三个方法给大家

        flv怎么转换成mp3?FLV(Flash Video)是一种被广泛应用于互联网的流行视频格式,然而该格式并非适用于所有设备和媒体播放器。相反,MP3作为数字音频格式,能够将高质量的音频文件压缩成相对较小的大小,因其占用空间小且音质优秀,MP3已成为数字音乐的主流格式。我

    2024年02月09日
    浏览(11)
  • 怎么用手机压缩图片?教给大家三种手机压缩图片方法

    怎么用手机压缩图片?教给大家三种手机压缩图片方法

    如何使用手机把图片的内存进行压缩呢?大家在使用照片的时候,如果照片的内存太大,不仅会占用手机的内存,也会影响一些网站上传图片的操作,因为图片内存太大很多都是上传不了的,为了解决这一问题我们可以将图片进行压缩。今天给大家分享三种手机就能压缩图片

    2024年02月08日
    浏览(15)
  • cajviewer怎么转换成pdf格式,分享几个方法给大家!

    cajviewer怎么转换成pdf格式,分享几个方法给大家!

    CAJViewer是一款常用的文献阅读软件,它主要用于打开和阅读中国知网等数据库中的CAJ格式文件。然而,有时候我们可能需要将这些CAJ文件转换为PDF格式,以便更方便地与他人分享或者进行打印。本文将介绍两到三种将CAJViewer文件转换为PDF格式的方法,其中之一是使用记灵在线

    2024年02月08日
    浏览(20)
  • flv怎么转换成mp4格式?准备3个方法给大家

    flv怎么转换成mp4格式?准备3个方法给大家

    nbsp; nbsp; flv怎么转换成mp4格式?FLV是一种流行的视频文件格式,最初由Adobe公司开发,用于在Web上播放和传输视频内容。FLV格式以其较小的文件大小和较高的压缩比而闻名,并广泛应用于在线视频分享平台、流媒体服务和网络广告等领域。能够提供较高质量的视频和音频体验

    2024年02月07日
    浏览(8)
  • 今天教大家微信小程序怎么免300元认证费终身使用的教程

    今天教大家微信小程序怎么免300元认证费终身使用的教程

    众所周知微信小程序认证需要300元认证费,当然用已认证的微信公众号可以免费认证但是认证微信公众号也需要300认证费而且需要每年进行年检等于每年都要花300元。 不知道大家注册小程序的时候有没有发现审核很慢申请完需要等几天很费时间, 而且微信限制一个身份证只

    2024年02月08日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包