雨露博客

  • 首页

  • 标签

  • 分类

  • 存档

  • 站点地图

  • 搜索

Java配置文件使用

发表于 2020-02-23 更新于 2024-04-13 分类于 编程语言 , java

配置文件是程序经常使用的东西,毕竟硬编码会使应用程序丧失很多的灵活性。Java应用程序中properties是一种比较常见的配置文件,Java系统也内置了Properties类来完成properties文件的读写操作;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * 无参构造方法
 */
//Properties prop=new Properties();

/**
 * 指定一个基础properties集合
 * 获取值时,首先在当前properties集合查找;
 * 如果未找到,则在基础properties集合中查找。
 * 通过这种构造方式可以形成一个查找链,获取时进行逐级查找。
 */
//Properties prop=new Properties(defaults);

/**
 * 加载properties配置文件
 */
//prop.load(streamOrReader);

/**
 * 加载XML配置文件
 */
//prop.loadFromXML(stream);

properties文件书写规则

  • 键与值使用=或:分割,原则上每行写一个键值对,如果要延伸到多行需要在行尾加\
  • 第一次出现的=或:会作为键值分割符,其后出现的=或:可以转义也可以不转义
  • 键前后以及值前部的空白字符会被忽略,如果要保留空格需要在空格前加转义字符\

properties文件中使用中文

大部分IDE创建的properties文件默认编码都是ISO8859-1,因此文件内不能书写中文。如果要书写中文建议将文件编码改为UTF-8,这样文件内注释书写中文完全没有问题。但如果值内含有中文取出时会乱码,这是因为Properties类处理properties文件时默认都是使用ISO8859-1。要解决此问题,可以使用native2ascii工具对内容进行转码,也可以对取出的内容使用new String(value.getBytes("ISO8859-1"),"UTF-8")进行编码转换,此时内容即可正常展示。

XML配置文件

Properties不仅能加载properties文件还能通过loadFromXML方法加载XML文件。相对properties文件来说XML文件默认使用UTF-8编码,没有中文乱码的问题,书写中文比较方便,但其不如properties文件简洁。XML文件书写格式如下:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>这是对整个文件的说明</comment>
<entry key="key1">value1</entry>
<!-- 普通注释 -->
<entry key="key2">value2</entry>
<entry key="key3">
<![CDATA[value3]]>
</entry>
</properties>

配置文件加载问题

一般来说加载配置文件只要书写格式符合要求,文件路径也没有弄错,加载是不会出现问题的。但平时还是经常听人说,文件明明存在路径也没有写错,格式也没问题;甚至还有自己运行没问题,换其他地方运行就报错的诡异问题。如果遇到这种问题,一般来说是配置文件的加载方式造成的,请注意以下几种加载方式的区别(通过类加载器加载文件可以从jar读取文件,普通的文件流无法读取jar包内的文件):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * 相对路径从类所在包加载文件,绝对路径(以/开头)从类路径根路径加载文件,不能加载jar包内的文件。
 */
Properties prop1=new Properties();
prop1.load(new FileInputStream(new File(PropertiesTest.class.getResource("config.properties").getFile())));

/**
 * 相对路径从类所在包加载文件,绝对路径(以/开头)从类路径根路径加载文件,可以加载jar包内的文件。
 */
Properties prop2=new Properties();
prop2.load(PropertiesTest.class.getResourceAsStream("config.properties"));

/**
 * 相对路径从类路径根路径加载文件,不支持绝对路径,可以加载jar包内的文件。
 */
Properties prop3=new Properties();
prop3.load(PropertiesTest.class.getClassLoader().getResourceAsStream("config.properties"));

国际化与资源绑定

国际化是另一个使用properties文件的重要场景。Java通过一组properties语言文件来为应用提供国际化能力,这样你可以编写独立于语言环境的应用程序,也可以轻松支持新的语言环境。通过如下几步操作你的应用将获得这种能力:

  1. 创建一组语言文件(语言文件命名格式为:文件名_语言编码.properties),每个语言文件对应一个语言环境。
  2. 使用资源绑定类ResourceBundle加载语言文件。

    1
    2
    3
    4
    5
    6
    /**
    * 路径从类路径根部开始计算,不需要也不能以/开始。
    * 可以使用包分割形式("language.message"),也可以使用路径分割形式("language.message")。
    */
    private static final ResourceBundle APPLICATION_RESOURCE_BUNDLE =
    ResourceBundle.getBundle("language.message");
  3. 使用资源绑定对象的getString方法获取展示字符串来代替硬编码。

    1
    2
    3
    4
    /**
    * 通过这种方式获取的字符串会根据运行时语言环境的不同,从不同的语言文件查找对应值。
    */
    String message = APPLICATION_RESOURCE_BUNDLE.getString("helloWorld");

JVM系统属性

Java系统内本身就存在着一个Properties对象,该对象可以通过System.getProperties()方法获取,对象内存储了JVM运行时系统信息。比较常用的属性有如下几个:

  • user.home -> 用户家目录
  • file.separator -> 文件路径分隔符
  • java.version -> Java版本
  • java.class.path -> 类路径

另外,需要特别指出的是应用程序启动时,通过-Dkey=value添加的启动参数,将会附加到JVM系统属性集合中。

  • 本文作者: 雨露网
  • 本文链接: /blog/2020/02/23/pl-java-properties/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
# java # properteis # 系统配置 # 国际化 # 配置文件
nginx安全配置
  • 文章目录
  • 站点概览
雨露网

雨露网

5 日志
6 分类
14 标签
友情链接
  • 雨露网
  • 雨露工具
  1. 1. properties文件书写规则
  2. 2. properties文件中使用中文
  3. 3. XML配置文件
  4. 4. 配置文件加载问题
  5. 5. 国际化与资源绑定
  6. 6. JVM系统属性
鄂ICP备13008716号 © 2019 – 2024 雨露网