Java 类之 java.util.Properties


文章目录

  • Java 类之 java.util.Properties
  • 一、简介
  • 二、主要功能
  • 1、存储键值对
  • 2、读取文件与属性
  • 代码示例
  • 运行结果
  • 截图
  • 3、设置属性并保存文件
  • 代码示例
  • 结果截图
  • 4、遍历属性
  • 代码示例
  • 运行结果


关联博客:《基于 Java 列举和说明常用的外部化配置的实现方式》

一、简介

java.util.Properties 是 Java 中用于处理属性文件的一个类。

属性文件通常用于存储配置信息,例如应用程序的设置和参数。Properties 类提供了一种方便的方式来管理键值对,其中键和值都是字符串类型

它本质上是一个 Hashtable ,因为 Hashtable 已经过时了,所以了解即可!

问题:Hashtable 是不是有点过时了?

ChatGPT 回答:是的,Hashtable 类在Java中被认为有点过时。虽然它是一个实现了基本的哈希表功能的类,但在 Java Collections Framework 中引入了更先进、更强大的替代类,如 HashMap

HashMapHashtable 的轻量级替代品,它具有相似的功能,但是在性能上更优越。HashMap 允许空键和空值,而 Hashtable 不允许。此外,Hashtable 的方法都是同步的,这意味着在多线程环境下,对 Hashtable 的操作是线程安全的。然而,这也带来了一些性能开销。

如果你在单线程环境下工作,并且不需要线程安全性,那么使用 HashMap 更为推荐。如果需要线程安全性,则可以考虑使用 ConcurrentHashMap 或者通过 Collections.synchronizedMap 方法包装 HashMap

总体来说,在现代 Java 开发中,更常见的做法是使用 HashMap 或其他相关的集合类,而不是直接使用 Hashtable

public class Properties extends Hashtable<Object,Object>

二、主要功能

1、存储键值对

Properties 对象可以存储键值对,其中键和值都是字符串。这些键值对通常以文本文件的形式存储,可以由人类读取和编辑

2、读取文件与属性

代码示例

package com.zibo;

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

public class Main {

    public static void main(String[] args) {
        // 例子:读取属性文件
        Properties properties = new Properties();
        // config.properties 文件放在根目录下!可能存在中文乱码的问题,这里着重演示读取的过程,不做处理
        try (InputStream input = new FileInputStream("config.properties")) {
            properties.load(input);
            System.out.println(properties.getProperty("name"));
            System.out.println(properties.getProperty("age"));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

运行结果

zibo
27

截图

Java 类之 java.util.Properties_开发语言

3、设置属性并保存文件

会创建新文件!如果文件名相同会覆盖!

代码示例

package com.zibo;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

public class Main {

    public static void main(String[] args) {
        Properties properties = new Properties();
        try (
            OutputStream out = new FileOutputStream("config.properties")
        ) {
            // 修改属性
            properties.setProperty("name", "ZIBO");
            properties.setProperty("age", "18");
            // 保存属性到 config.properties 文件
            properties.store(out, "Set 'name' and 'age' value");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

结果截图

Java 类之 java.util.Properties_Java_02

4、遍历属性

代码示例

package com.zibo;

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

public class Main {

    public static void main(String[] args) {
        // 例子:读取属性文件
        Properties properties = new Properties();
        // config.properties 文件放在根目录下!可能存在中文乱码的问题,这里着重演示读取的过程,不做处理
        try (InputStream input = new FileInputStream("config.properties")) {
            properties.load(input);
            // 遍历所有属性
            properties.forEach((key, value) -> System.out.println(key + " = " + value));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

运行结果

name = ZIBO
age = 18