Java应用程序中如何使用Properties类读写配置文件教程

使用Properties

Java应用程序中如何使用Properties类读写配置文件教程

编写应用程序时,常常需要对配置文件进行读写操作。比如,有关于用户的设置:

  1. # 上次最后打开的文件:
  2. [id_1900468860]=/data/hello.txt
  3. # 自动保存文件的时间间隔:
  4. auto_save_interval=60

配置文件的特点在于,其 Key-Value 通常为 String-String 类型。正因如此,我们完全具备用 Map 来对其进行表示的条件。

配置文件很常用,所以 Java 集合库提供了一个 Properties 来表示一组“配置”。由于历史遗留的缘故,Properties 内部实际上是一个 Hashtable,不过我们只需用到 Properties 自身用于读写配置的接口。

读取配置文件

使用 Properties 来读取配置文件是很简单的。在 Java 中,默认的配置文件其扩展名是.properties 。该配置文件每行的形式是 key=value ,而以#开头的行则是注释。以下是一个具有代表性的配置文件:

  1. # setting.properties
  2. last_open_file=/data/hello.txt
  3. auto_save_interval=60

可以从文件系统读取这个.properties文件:

  1. String f = "setting.properties";
  2. Properties props = new Properties();
  3. props.load(new java.io.FileInputStream(f));
  4. String filepath = props.getProperty("last_open_file");
  5. String interval = props.getProperty("auto_save_interval", "120");

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

可以从 classpath 读取.properties 文件,因为 load(InputStream) 方法能够接收一个 InputStream 实例,此实例表示一个字节流,而这个字节流不一定是文件流,也有可能是从 jar 包中读取的资源流。

  1. Properties props = new Properties();
  2. props.load(getClass().getResourceAsStream("/common/setting.properties"));

试试从内存读取一个字节流:

如果存在多个.properties 文件,能够多次调用 load() 进行读取。并且,后面读取的 key-value 会将之前已读取的 key-value 覆盖掉。

  1. Properties props = new Properties();
  2. props.load(getClass().getResourceAsString("/common/setting.properties"));
  3. props.load(new FileInputStream(“C 盘下的 conf 文件夹中的 setting.properties 文件”));

上面的代码展示了 Properties 的一种常用方式:能够将默认配置文件放置于 classpath 内。接着,依据机器的环境来编写另一个配置文件,以此来覆盖部分默认的配置。

Properties 的设计初衷是用来存储 String 类型的 key - value。然而实际上,Properties 是从 Hashtable 派生出来的。它的设计存在一定问题,只是为了保持兼容性,到现在已经无法进行修改了。除了有 getProperty() 和 setProperty() 方法之外,还有从 Hashtable 继承而来的 get() 和 put() 方法。这些方法的参数签名是 Object。我们在使用 Properties 时,不要调用这些从 Hashtable 继承而来的方法。

写入配置文件

如果 Properties 实例通过 setProperty()被修改了,那么就可以将配置写入文件,这样在下次启动时就能获得最新配置。写入配置文件需使用 store()方法。

  1. Properties props = new Properties();
  2. props.setProperty("url", "http://www.liaoxuefeng.com");
  3. props.setProperty("language", "Java");
  4. props.store(new FileOutputStream("C:\\conf\\setting.properties"), "这是写入的properties注释");

编码

早期版本的 Java 规定.properties 文件的编码为 ASCII 编码(ISO8859-1)。若涉及中文,就必须用 name=\u4e2d\u6587 来进行表示,这样的方式极为别扭。自 JDK9 起,Java 的.properties 文件能够使用 UTF-8 编码了。

需要注意的是,load(InputStream)默认是以 ASCII 编码来读取字节流的,这样就会引发读到乱码的情况。我们应当使用另一个重载方法 load(Reader)来进行读取。

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

可以正常读取中文。InputStream 与 Reader 的区别在于,InputStream 是字节流,而 Reader 是字符流。字符流在内存中是以 char 类型来表示的,并且不涉及编码问题。

小结

Java 集合库提供的 Properties 可用于读写配置文件。这种配置文件是.properties 文件。.properties 文件能够使用 UTF-8 编码。

能够从文件系统中读取.properties 文件,也能够从 classpath 中读取.properties 文件,还能够从其他任何地方读取.properties 文件。

读写 Properties 时,要注意只能使用 getProperty()方法和 setProperty()方法,不可以调用继承而来的 get()方法以及 put()等方法。

读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读