Java中Properties类的操作知识:读取配置文件与变量设置详解

java 中存在一个较为重要的类叫做 properties(java.util.properties)。它主要被用于读取 java 的配置文件。不同的语言都有各自所支持的配置文件。在这些配置文件中,有很多配置文件的内容是经常发生改变的。这样做的目的是为了给用户提供便利,使得用户能够在不依赖程序本身的情况下对相关的变量设置进行修改。

Java中Properties类的操作知识:读取配置文件与变量设置详解

Java中Properties类的操作

知识如果不加以运用,就等同于没有用处,等到真正需要使用的时候还得重新开始学习。最近正在查看几款开源模拟器的源代码,其中包含了许多关于 Properties 类的配置文件。因为已经有很长时间没有使用 Java 了,而这些模拟器大多是用 Java 编写的,并且还涉及一些脚本语言的配置文件等。所以,不得已之下,又得重新开始学习和使用 Java 了。

一、Java Properties类

Java 中有一个较为重要的类叫 Properties(Java.util.Properties)。它主要被用于读取 Java 的配置文件。不同的语言都有各自所支持的配置文件。在配置文件中,有很多变量是经常会发生改变的。这样做的目的是为了给用户提供便利,使得用户能够脱离程序本身去对相关的变量设置进行修改。Python 支持的配置文件是.ini 文件,它有专门用于配置文件的类 ConfigParse,这使得程序员或用户能通过该类的方法来修改.ini 配置文件。在 Java 中,其配置文件通常是.properties 文件,是一种文本文件,文件内容的格式为“键=值”,并且文本配置文件信息可用"#"进行注释。

Properties类配置文件自配置文件table,如下:

它提供了几个主要的方法:

在配置文件列表中,使用 getProperty 来配置文件属性。通过指定的键,能够获取到该键所对应的 value 。

load ( InputStream inStream),从输入流里读取属性列表,也就是键和元素对。通过装载指定的文件(例如上面的 test.properties 文件),从而获取该文件里的所有键 - 值对,以便 getProperty ( String key) 进行搜索。

配置文件有一个名为 Property 的方法,其参数为 String 类型的 key 和 String 类型的 value。接着调用了 Hashtable 的 put 方法。他利用调用基类的 put 方法这一操作来设定键 - 值对。

store 方法以适合 load 方法加载到 Properties 表的格式,将此 Properties 表的属性列表(键和元素对)写入输出流 out 。与 load 方法相反,此方法把键 - 值对写入到指定的文件中。

配置文件 () 会清除所有已装载的键 - 值对。这种清除操作在基类中是被提供的。

二、Java读取Properties文件

Java读取 Properties 文件的方法有不少。其中,最为常用的是借助 java.配置文件.配置文件类的 get 配置文件 AsStream(String name) 方法来达成。具体的调用方式如下:

InputStream in;in = getClass().getResourceAsStream("资源 Name");作为我们写程序的,用这一种就足够了。

登录后复制

或者下面这种也常用:

创建了一个名为 in 的输入流,它是通过将一个新的缓冲输入流包装在一个新的文件输入流(filepath)之上而创建的。

登录后复制

三、相关实例

以下列举一些实例,以加深对 Properties 类的理解与记忆。

我们知道,Java 虚拟机(JVM)拥有自己的系统配置文件(system.properties)。我们能够通过以下这些方式来获取它。

1、获取JVM的系统属性

 import java.util.Properties;
 public class ReadJVM {
公共静态 void 主函数(字符串数组参数){
System 的 getProperties()方法获取到的属性被赋值给了 Properties 对象 pps。
   pps.list(System.out);
  }
 }

登录后复制

结果:

2、随便新建一个配置文件(Test.properties)

name=JJ
Weight=4444
Height=3333
 
 public class getProperties {
public static void main 方法,该方法接收一个字符串数组参数 args,并且抛出 FileNotFoundException 和 IOException 异常。
Properties 被创建出来,其名称为 pps,即 Properties pps = new Properties();
pps 加载了一个新的文件输入流,该输入流指向名为“Test.properties”的文件。
enum1 = pps.propertyNames();//获取配置文件的名字
当 enum1 还有更多元素时,进行以下操作:
获取枚举类型 enum1 的下一个元素,并将其转换为字符串类型赋值给字符串变量 strKey 。
获取属性值的操作如下:先指定要获取属性的键为 strKey,然后通过 pps.getProperty(strKey) 这个方法来获取对应的属性值,并将其赋值给字符串变量 strValue。
System.out 会打印出 strKey 加上等号再加上 strValue 的内容。即先输出 strKey ,接着输出等号,最后输出 strValue 。
   }
  }
 }

登录后复制

3、一个比较综合的实例

根据key读取value

读取properties的全部信息

写入新的properties信息

 //关于Properties类常用的操作
类 TestProperties 为公共类。
  //根据Key读取Value
在一个静态的方法中,该方法名为 GetValueByKey,它接受两个参数,一个是字符串类型的 filePath,另一个是字符串类型的 key,用于获取特定键对应的值。
   Properties pps = new Properties();
   try {
创建了一个 FileInputStream 对象,参数为 filePath。然后将这个 FileInputStream 对象作为参数传递给 BufferedInputStream 的构造函数,创建了一个 BufferedInputStream 对象。最后将这个 BufferedInputStream 对象赋值给 InputStream 类型的变量 in。
    pps.load(in);
String 的值等于 pps 获取到的 key 对应的属性值。
    return value;
    
   }catch (IOException e) {
    e.printStackTrace();
    return null;
   }
  }
  
  //读取Properties的全部信息
public static void 获取所有属性(String filePath) throws IOException {
   Properties pps = new Properties();
创建了一个 FileInputStream 对象,其参数为 filePath。然后将这个 FileInputStream 对象作为参数传递给 BufferedInputStream 的构造函数,创建了一个 BufferedInputStream 对象。最后将这个 BufferedInputStream 对象赋值给 InputStream 类型的变量 in。
   pps.load(in);
获取配置文件的名字的操作是:枚举 en = pps.propertyNames();
   
当 en 还有更多元素时,{
String 类型的 strKey 等于从 en 中取出的下一个元素并进行强制类型转换为 String 类型。
    String strValue = pps.getProperty(strKey);
    System.out.println(strKey + "=" + strValue);
   }
   
  }
  
  //写入Properties信息
public static void WriteProperties. 它接收三个参数,分别是 filePath(文件路径)、pKey(属性键)和 pValue(属性值),并且会抛出 IOException 异常。
   Properties pps = new Properties();
   
创建了一个输入流对象 in,该对象是通过使用 filePath 路径创建的 FileInputStream 对象。
   //从输入流中读取属性列表(键和元素对) 
   pps.load(in);
调用 Hashtable 的 put 方法,并且利用 getProperty 方法来提供并行性。
强制要求将属性的键和值都使用字符串。返回值是调用 Hashtable 的 put 方法所得到的结果。
创建了一个用于输出数据的流对象 out,这个流对象是通过创建一个新的 FileOutputStream 对象来实现的,并且传入了 filePath 作为参数,用于指定要输出到的文件路径。
pps 将属性 pKey 设置为 pValue 。
以一种能够适用于使用 load 方法加载到 Properties 表的格式,
把此 Properties 表里面的属性列表,也就是键和元素对,写入到输出流中。
pps.store(out, "对 " + pKey + " 的名称进行更新");
  }
  
public static void main 方法用于接收字符串数组参数 args ,并可能抛出 IOException 异常。
通过键“Test.properties”获取对应的值,然后将其赋值给字符串变量 value,获取到的键值为“name”。
System 输出了 value 。
获取所有的属性("Test.properties");
WriteProperties 这个函数用于对 "Test.properties" 文件进行操作,其中一个参数是 "long",另一个参数是 "212"。
  }
 }

登录后复制

结果:

Test.properties中文件的数据为:

#Update long name
#Sun Feb 23 18:17:16 CST 2016
name=JJ
Weight=4444
long=212
Height=3333

登录后复制

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

相关推荐

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日

25阅读