详细讲解Java中的Properties类

CSDN 2024-06-19 09:05:02 阅读 97

目录

前言1. 基本知识2. 代码示例3. Demo

前言

使用Properties出现中文乱码可看我这篇文章:properties出现中文乱码解决方法(万能)

1. 基本知识

Properties 类是 Java 中用于处理配置文件的工具类,它继承自 Hashtable 类,实现了 Map 接口。

主要用于读取和写入属性文件,以键值对的形式存储数据。配置文件通常以 .properties 为扩展名,其中每一行表示一个属性或配置项。

使用该类可以更好的处理文件:

配置文件管理: 主要用于读取和保存应用程序的配置信息,例如数据库连接信息、用户设置等。国际化: 用于加载不同语言的资源文件,方便国际化应用程序。持久化: 可以将配置信息持久化到文件,以便下次程序启动时重新加载。

对于其方法可查看其API接口:Properties API接口

构造方法如下:

方法 表述
Properties() 创建一个没有默认值的空属性列表。
Properties​(int initialCapacity) 创建一个没有默认值的空属性列表,并且初始大小容纳指定数量的元素,而无需动态调整大小。
Properties​(Properties defaults) 创建具有指定默认值的空属性列表。

常用的方法如下:

返回类型 方法 表述
String getProperty​(String key)

getProperty​(String key, String defaultValue)

在此属性列表中搜索具有指定键的属性。
void list​(PrintStream out)

list​(PrintWriter out)

将此属性列表打印到指定的输出流。
void load​(InputStream inStream) 从输入字节流中读取属性列表(键和元素对)。
void load​(Reader reader) 以简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
Object setProperty​(String key, String value) 调用 Hashtable方法 put 。
void store​(OutputStream out, String comments) 将此 Properties表中的此属性列表(键和元素对)以适合使用 load(InputStream)方法加载到 Properties表的格式写入输出流。
void store​(Writer writer, String comments) 将此 Properties表中的此属性列表(键和元素对)以适合使用 load(Reader)方法的格式写入输出字符流。

2. 代码示例

当使用 Properties 类时,你可以使用上述方法来读取和写入属性。以下是这些方法的一些简单的代码示例:

1. getProperty(String key)

Properties properties = new Properties();try (InputStream input = new FileInputStream("config.properties")) { properties.load(input); // 获取属性值 String value = properties.getProperty("key"); System.out.println("Value for key 'key': " + value);} catch (IOException e) { e.printStackTrace();}

2. getProperty(String key, String defaultValue)

Properties properties = new Properties();try (InputStream input = new FileInputStream("config.properties")) { properties.load(input); // 获取属性值,如果不存在则使用默认值 String value = properties.getProperty("nonexistentKey", "default"); System.out.println("Value for key 'nonexistentKey': " + value);} catch (IOException e) { e.printStackTrace();}

3. list(PrintStream out) / list(PrintWriter out)

Properties properties = new Properties();try (InputStream input = new FileInputStream("config.properties")) { properties.load(input); // 打印属性列表到控制台 properties.list(System.out);} catch (IOException e) { e.printStackTrace();}

4. load(InputStream inStream)

Properties properties = new Properties();try (InputStream input = new FileInputStream("config.properties")) { // 从输入流中读取属性列表 properties.load(input); // 遍历所有键值对 for (String key : properties.stringPropertyNames()) { String value = properties.getProperty(key); System.out.println(key + ": " + value); }} catch (IOException e) { e.printStackTrace();}

5. store(OutputStream out, String comments)

Properties properties = new Properties();properties.setProperty("key1", "value1");properties.setProperty("key2", "value2");try (OutputStream output = new FileOutputStream("output.properties")) { // 将属性列表写入输出流 properties.store(output, "Comments for the output file");} catch (IOException e) { e.printStackTrace();}

6. store(Writer writer, String comments)

Properties properties = new Properties();properties.setProperty("key1", "value1");properties.setProperty("key2", "value2");try (Writer writer = new FileWriter("output.properties")) { // 将属性列表写入输出字符流 properties.store(writer, "Comments for the output file");} catch (IOException e) { e.printStackTrace();}

3. Demo

上述的API方法可适当选择,完整的Demo可充分了解这个类的整体逻辑:

import java.io.*;import java.util.Properties;public class PropertiesDemo { public static void main(String[] args) { // 创建 Properties 对象 Properties properties = new Properties(); // 设置属性值 properties.setProperty("username", "码农研究僧"); properties.setProperty("password", "123456789"); properties.setProperty("server", "https://blog.csdn.net/weixin_47872288"); // 将属性列表写入输出流 try (OutputStream output = new FileOutputStream("config.properties")) { properties.store(output, "Sample Configuration"); System.out.println("Properties written to config.properties"); } catch (IOException e) { e.printStackTrace(); } // 从输入流中读取属性列表 try (InputStream input = new FileInputStream("config.properties")) { properties.load(input); // 获取属性值 String username = properties.getProperty("username"); String password = properties.getProperty("password"); String server = properties.getProperty("server"); System.out.println("Username: " + username); System.out.println("Password: " + password); System.out.println("Server: " + server); } catch (IOException e) { e.printStackTrace(); } // 打印属性列表到控制台 /** * -- listing properties -- * password=123456789 * server=https://blog.csdn.net/weixin_47872288 * username=码农研究僧 */ properties.list(System.out); }}

终端输出结果如下:

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。