从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

    • 我的 Java 学习路线
    • 安装 Java
    • Java 数据类型

    • Java 多版本配置
    • 面向对象

    • Java 核心类

    • IO

      • IO 介绍
      • File 对象介绍
      • InputStream
      • OutputStream
      • Decorator 模式
      • 读写 zip 文件
      • Properties 类
        • 读取配置文件
        • 写入配置文件
        • 编码问题
      • 读取 classpath 中的配置文件
      • 序列化与反序列化
      • Reader
      • Writer
      • PrintStream 和 PrintWriter
      • Scanner
      • 使用 Files
      • Console
      • IO 系列小结
    • Java 与时间

    • 异常处理

    • 哈希和加密算法

    • Java8 新特性

    • 网络编程

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaSE
  • IO
2023-02-02
目录

Properties 类

# Properties 类

在编写应用程序的时候,经常需要读写配置文件。

例如记录用户上次打开的文件,自动保存文件的时间间隔,使用什么主题等:

# 上次最后打开的文件:
last_open_file=/data/hello.txt
# 自动保存文件的时间间隔:
auto_save_interval=60
# 使用什么主题:
colorTheme=Monokai
1
2
3
4
5
6

我们使用的配置文件,其内容通常是 key-value 型的,我们完全可以用 Map<String, String> 来存储和处理;但我们不用自己造轮子,Java 集合库提供了一个 Properties 来表示一组“配置”。

# 读取配置文件

Java 默认配置文件以 .properties 为扩展名,每行以 key=value 表示,以 # 课开头的是注释

我们自己手动创建一个配置文件 setting.properties,然后再读取。

# setting.properties
last_open_file=/data/hello.txt
auto_save_interval=60
1
2
3
import java.io.FileInputStream;
import java.util.Properties;

public class IODemo8Properties {
  public static void main(String[] args) throws Exception{
    String filename = "setting.properties";
    Properties props = new Properties();
    props.load(new FileInputStream(filename));

    String last_open_file = props.getProperty("last_open_file");
    String auto_save_interval = props.getProperty("auto_save_interval");

    System.out.println("last_open_file: " + last_open_file);
    System.out.println("auto_save_interval: " + auto_save_interval);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

调用 getProperty() 获取配置时,如果 key 不存在,将返回 null。我们还可以提供一个默认值,这样,当 key 不存在的时候,就返回默认值,语法格式为:public String getProperty(String key,String defaultValue),实践:

    String testDefault = props.getProperty("testDefault", "aaa");
    System.out.println("testDefault: " + testDefault);    //aaa
1
2

用 Properties 读取配置文件,一共有三步:

  1. 创建 Properties 实例;
  2. 调用 load() 读取文件;
  3. 调用 getProperty() 获取配置。

注意点:

  • 如果有多个 .properties 文件,可以反复调用 load() 读取,后读取的 key-value 会覆盖已读取的 key-value。通过这种机制,我们可以先读取有默认的配置文件,然后读取用户自己的配置,这样就达到了用户的配置优先于默认配置的效果。
  • load(InputStream) 方法接收一个 InputStream 实例,表示一个字节流,它不一定是文件流,还可以是 ByteArrayInputStream 等。

# 写入配置文件

如果通过 setProperty() 修改了 Properties 实例,可以把配置写入文件,以便下次启动时获得最新配置。写入配置文件使用 store() 方法:

public void store(OutputStream out, String comments)throws IOException
1

第一个参数是 OutputStream,第二个参数是本次存储配置时的注释(也会存储到配置文件里)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

public class IODemo8PropertiesWrite {
  public static void main(String[] args) throws Exception{
    String filename = "setting.properties";
    Properties props = new Properties();
    props.load(new FileInputStream(filename));

    props.setProperty("myWebsite", "www.peterjxl.com");
    props.store(new FileOutputStream(filename), "comment");
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

运行后,配置文件内容如下:

#comment
#Mon Jan 30 22:42:33 CST 2023
myWebsite=www.peterjxl.com
auto_save_interval=60
last_open_file=/data/hello.txt
1
2
3
4
5

# 编码问题

早期版本的 Java 规定 .properties 文件编码是 ASCII 编码(ISO8859-1),如果涉及到中文就必须用 name=\u4e2d\u6587 来表示,非常别扭。从 JDK9 开始,Java 的 .properties 文件可以使用 UTF-8 编码了。

不过,需要注意的是,由于 load(InputStream) 默认总是以 ASCII 编码读取字节流,所以会导致读到乱码。我们需要用另一个重载方法 load(Reader) 读取:

Properties props = new Properties();
props.load(new FileReader("settings.properties", StandardCharsets.UTF_8));
1
2

就可以正常读取中文。InputStream 和 Reader 的区别是一个是字节流,一个是字符流。字符流在内存中已经以 char 类型表示了,不涉及编码问题。

上次更新: 2025/6/3 09:31:54
读写 zip 文件
读取 classpath 中的配置文件

← 读写 zip 文件 读取 classpath 中的配置文件→

最近更新
01
学点统计学:轻松识破一本正经的胡说八道
06-05
02
2025 年 5 月记
05-31
03
《贫穷的本质》很棒,但可能不适合你
05-27
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式