哈喽,各位小伙伴们,你们好呀,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
如下是Java集合体系架构图,近期几期内容都是围绕该体系进行知识讲解,以便于同学们学习Java集合篇知识能够系统化而不零散。
前言
在Java开发中,我们常常需要读取一些配置文件,如数据库配置文件、日志配置文件等。而在Java中,我们可以使用Properties集合来读取这些配置文件,方便快捷。本文将从Properties集合的源代码解析、应用场景案例、优缺点分析、类代码方法介绍、测试用例等多个方面进行讲解。
摘要
本文将介绍Java中的Properties集合,包括其基本特性、源代码解析、应用场景案例、优缺点分析、类代码方法介绍和测试用例。读者将能够了解Properties集合的基本概念和使用方法,以及如何在实际开发中应用。
Properties集合
简介
Properties是一个键值对集合,可以用来表示一组配置信息,通常用于读取配置文件。在Java中,它是一个Hashtable的子类,因此具有Hashtable的所有特性。Properties集合中的键和值都是字符串类型,且键和值之间用等于号“=”连接。
在Java中,我们通常使用以下方法来读取Properties文件:
代码语言:java复制Properties prop = new Properties();
InputStream in = new FileInputStream("config.properties");
prop.load(in);
其中config.properties
为配置文件名,prop.load(in)
方法将配置文件中的键值对加载到Properties集合中。接下来,我们可以通过以下方法获取键对应的值:
String value = prop.getProperty("key");
源代码解析
在Properties集合的源代码中,我们可以看到它是一个Hashtable的子类,因此继承了Hashtable的所有方法和特性。同时,它也实现了Map接口,因此也可以使用Map中的方法。
Properties集合中的键和值都是字符串类型,因此它提供了一些特殊的方法来获取不同类型的值。例如getProperty(String key, String defaultValue)
方法可以在无法找到键值对时返回默认值,getProperty(String key)
方法可以获取键对应的值。
public String getProperty(String key, String defaultValue) {
String val = getProperty(key);
return (val == null) ? defaultValue : val;
}
public synchronized String getProperty(String key) {
Object oval = super.get(key);
String sval = (oval instanceof String) ? (String)oval : null;
return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}
在读取Properties文件时,Properties集合使用了InputStream来读取数据,并将其转换为字符流。
具体实现如下:
代码语言:java复制public synchronized void load(InputStream inStream) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(inStream, "8859_1"));
while (true) {
String line = in.readLine();
if (line == null)
return;
if (line.length() > 0) {
char c = line.charAt(0);
if ((c != '#') && (c != '!'))
while (continueLine(line)) {
String nextLine = in.readLine();
if (nextLine == null)
nextLine = "";
String loppedLine = line.substring(0, line.length() - 1);
line = loppedLine nextLine;
}
int len = line.length();
int keyStart;
for (keyStart = 0; keyStart < len; keyStart )
if (whiteSpaceChars.indexOf(line.charAt(keyStart)) == -1)
break;
if (keyStart == len)
continue;
char firstChar = line.charAt(keyStart);
if ((firstChar == '\') || (firstChar == '#') || (firstChar == '!')) {
keyStart ;
if (keyStart == len)
continue;
}
int separatorIndex = -1;
for (int i = keyStart; i < len; i ) {
char currentChar = line.charAt(i);
if (currentChar == '\')
i ;
else if (separators.indexOf(currentChar) != -1) {
separatorIndex = i;
break;
}
}
int valueStart = separatorIndex 1;
while (valueStart < len) {
char c = line.charAt(valueStart);
if (whiteSpaceChars.indexOf(c) == -1)
if ((c == '\') || (c == '#') || (c == '!'))
valueStart ;
else
break;
valueStart ;
}
String key = loadConvert(line.substring(keyStart, separatorIndex >= 0 ? separatorIndex : len), true);
String value = loadConvert(line.substring(valueStart, len), false);
put(key, value);
}
}
}
在这段代码中,loadConvert(String str, boolean escape)
方法用于将字符串转换为字符流。continueLine(String line)
方法用于处理连续行,即当当前行以反斜杠结尾时,读取下一行并将其合并到当前行中。
应用场景案例
Properties集合通常用于读取配置文件,例如数据库配置、日志配置等。通过将配置信息保存在Properties集合中,我们可以很方便地获取和修改配置信息。
下面是一个简单的配置文件示例:
代码语言:java复制db.url=jdbc:mysql://127.0.0.1:3306/db_java
db.password=654321
db.username=admin
在读取配置文件时,我们可以使用以下代码:
代码语言:java复制Properties prop = new Properties();
InputStream in = new FileInputStream("config/config.properties");
prop.load(in);
String url = prop.getProperty("db.url");
String username = prop.getProperty("db.username");
String password = prop.getProperty("db.password");
优缺点分析
Properties集合的优点在于:
- 简单易用:Properties集合提供了简单易用的方法来读取和写入配置文件。
- 高效性能:Properties集合是基于Hashtable实现的,因此具有Hashtable的高效性能和稳定性。
- 可读性:配置文件的格式为键值对,易于阅读和修改。
Properties集合的缺点在于:
- 类型限制:Properties集合中的键和值都是字符串类型,因此不支持其他类型的数据。
- 无法保证顺序:Properties集合中的键值对存储顺序是不确定的,因此无法保证读取和写入时的顺序。
类代码方法介绍
以下是Properties类中常用的方法:
getProperty(String key, String defaultValue)
:获取键对应的值,如果键不存在则返回默认值。getProperty(String key)
:获取键对应的值,如果键不存在则返回null。setProperty(String key, String value)
:设置键值对。load(InputStream in)
:从输入流中加载键值对。store(OutputStream out, String comments)
:将所有键值对写入输出流中。
完整的Properties类代码可以在Java SE的官方文档中查看。
测试用例
我们可以编写以下测试用例来测试Properties集合的读取和写入功能:
测试代码演示
代码语言:java复制package com.example.javase.collection;
import java.io.*;
import java.util.Properties;
/**
* @author ms
* @date 2023/10/26 18:19
*/
public class PropertiesTest {
public static void main(String[] args) throws IOException {
Properties prop = new Properties();
// 读取配置文件
InputStream in = new FileInputStream("config/config.properties");
prop.load(in);
in.close();
// 获取配置信息
String url = prop.getProperty("db.url");
String username = prop.getProperty("db.username");
String password = prop.getProperty("db.password");
System.out.println("db.url = " url);
System.out.println("db.username = " username);
System.out.println("db.password = " password);
// 修改配置信息
prop.setProperty("db.password", "654321");
OutputStream out = new FileOutputStream("config/config.properties");
prop.store(out, null);
System.out.println("修改后的db.password = " prop.getProperty("db.password"));
out.close();
}
}
在这个测试用例中,我们读取了一个配置文件并输出了其中的配置信息。然后,我们修改了一个配置项的值并保存到配置文件中。
如下是我们用来测试的配置文件:config.properties
配置内容如下:
代码语言:java复制db.password=123456
db.url=jdbc:mysql://127.0.0.1:3306/db_java
db.username=admin
测试结果
根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。
测试代码分析
根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。
这是一个Java代码文件,其中主要涉及了Java中的Properties类。该类用于读取和修改配置文件(.properties文件),并且具有方便的读取和写入配置属性的方法。
首先,代码创建了一个空的Properties对象prop,然后使用InputStream
读取配置文件config/config.properties
中的属性信息,并将其加载到Properties
对象中。之后,通过getProperty()
方法获取属性值并将其输出到控制台。接着,代码修改了属性db.password
的值,并使用OutputStream
将修改后的属性写入到配置文件中。
这个代码示例实现了对配置文件的读取和修改操作,可以作为Java中处理配置文件的示例参考。
全文小结
本文介绍了Java中的Properties集合,包括其基本特性、源代码解析、应用场景案例、优缺点分析、类代码方法介绍和测试用例。Properties集合通常用于读取配置文件,具有简单易用、高效性能和可读性等优点。同时在实际开发过程中,我们需要根据具体情况选择合适的方案来使用Properties集合,以避免出现问题。
总结
本文介绍了Java中的Properties
集合,它是一个键值对集合,通常用于读取配置文件。Properties集合具有简单易用、高效性能和可读性等优点,同时,它也有类型限制和无法保证顺序等缺点。本文深入分析了Properties集合的源代码,介绍了其常用方法,并给出了测试用例。在实际开发中,我们需要根据具体情况选择合适的方案来使用Properties集合,以避免出现问题。
... ...
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
... ...
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!