在Java应用程序中,经常需要读取properties配置文件中的参数,以便配置应用程序的运行参数。读取properties可以使用Java的 Properties 类,该类可以很方便地读取配置文件中的属性。
一、读取properties文件基础
首先,我们需要先创建一个 properties 文件,包含需要读取的属性和值:
name=张三 age=25 gender=男
然后,我们需要使用 Properties 类来读取配置文件。我们可以使用 Properties 类提供的 load() 方法来加载 properties 文件。
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadProperties { public static void main(String[] args) { // 获取配置文件路径 String configPath = "config.properties"; // 创建 Properties 对象 Properties props = new Properties(); // 使用 ClassLoader 加载配置文件 InputStream in = ReadProperties.class.getClassLoader().getResourceAsStream(configPath); try { // 加载配置文件 props.load(in); } catch (IOException e) { e.printStackTrace(); } // 获取属性值 String name = props.getProperty("name"); String age = props.getProperty("age"); String gender = props.getProperty("gender"); System.out.println("name=" + name); System.out.println("age=" + age); System.out.println("gender=" + gender); } }
二、读取properties文件的其他方式
1. 使用 Properties 类提供的 load(InputStream) 方法
我们可以使用 Properties 类提供的 load(InputStream) 方法,直接从 InputStream 中读取配置文件。
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadProperties { public static void main(String[] args) { // 获取配置文件路径 String configPath = "config.properties"; // 创建 Properties 对象 Properties props = new Properties(); // 使用 FileInputStream 加载配置文件 InputStream in = null; try { in = new FileInputStream(configPath); // 加载配置文件 props.load(in); } catch (IOException e) { e.printStackTrace(); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } // 获取属性值 String name = props.getProperty("name"); String age = props.getProperty("age"); String gender = props.getProperty("gender"); System.out.println("name=" + name); System.out.println("age=" + age); System.out.println("gender=" + gender); } }
2. 使用 Properties 类提供的 loadFromXML(InputStream) 方法
除了可以读取 properties 配置文件之外,Properties 类还提供了读取 XML 格式的配置文件的方法。
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadProperties { public static void main(String[] args) { // 获取配置文件路径 String configPath = "config.xml"; // 创建 Properties 对象 Properties props = new Properties(); // 使用 FileInputStream 加载配置文件 InputStream in = null; try { in = new FileInputStream(configPath); // 加载配置文件 props.loadFromXML(in); } catch (IOException e) { e.printStackTrace(); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } // 获取属性值 String name = props.getProperty("name"); String age = props.getProperty("age"); String gender = props.getProperty("gender"); System.out.println("name=" + name); System.out.println("age=" + age); System.out.println("gender=" + gender); } }
3. 使用 ResourceBundle 类读取配置文件
另一种读取配置文件的方式是使用 ResourceBundle 类。通过 ResourceBundle 类,我们可以读取多种类型的配置文件,如 properties、XML、txt 等等。
import java.util.ResourceBundle; public class ReadProperties { public static void main(String[] args) { // 获取配置文件路径 String configPath = "config"; // 创建 ResourceBundle 对象 ResourceBundle bundle = ResourceBundle.getBundle(configPath); // 获取属性值 String name = bundle.getString("name"); String age = bundle.getString("age"); String gender = bundle.getString("gender"); System.out.println("name=" + name); System.out.println("age=" + age); System.out.println("gender=" + gender); } }
三、读取properties文件中的数组
在 properties 配置文件中,可以将多个值用逗号隔开存储,以实现读取数组的效果。
fruits=apple,banana,orange
在读取数组时,我们需要先使用 getProperty() 方法获取一个包含了所有值的字符串,然后再使用 split() 方法分割字符串,得到一个字符串数组。
import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Properties; public class ReadPropertiesArray { public static void main(String[] args) { // 获取配置文件路径 String configPath = "config.properties"; // 创建 Properties 对象 Properties props = new Properties(); // 使用 ClassLoader 加载配置文件 InputStream in = ReadPropertiesArray.class.getClassLoader().getResourceAsStream(configPath); try { // 加载配置文件 props.load(in); } catch (IOException e) { e.printStackTrace(); } // 获取属性值 String fruitsStr = props.getProperty("fruits"); String[] fruits = fruitsStr.split(","); System.out.println(Arrays.toString(fruits)); } }
四、读取properties文件中的特殊字符
在 properties 配置文件中,有时候需要使用特殊字符,如空格、等号、冒号等等。这些特殊字符在 properties 文件中需要进行转义。
在 Java 中,可以使用 Unicode 转义进行转义。例如:空格字符可以写成 \u0020。
name=John\u0020Doe password=my\u0020password
在读取特殊字符时,Properties 类会自动解析 Unicode 转义字符。
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadPropertiesSpecialChar { public static void main(String[] args) { // 获取配置文件路径 String configPath = "config.properties"; // 创建 Properties 对象 Properties props = new Properties(); // 使用 ClassLoader 加载配置文件 InputStream in = ReadPropertiesSpecialChar.class.getClassLoader().getResourceAsStream(configPath); try { // 加载配置文件 props.load(in); } catch (IOException e) { e.printStackTrace(); } // 获取属性值 String name = props.getProperty("name"); String password = props.getProperty("password"); System.out.println("name=" + name); System.out.println("password=" + password); } }
五、读取properties文件中的中文
在 properties 配置文件中,可以使用中文字符。但是,这些中文字符在文件中是以 Unicode 编码进行存储的。
在读取中文字符时,Properties 类会自动解析 Unicode 编码,将其转换成中文字符。
name=\u5f20\u4e09
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadPropertiesChinese { public static void main(String[] args) { // 获取配置文件路径 String configPath = "config.properties"; // 创建 Properties 对象 Properties props = new Properties(); // 使用 ClassLoader 加载配置文件 InputStream in = ReadPropertiesChinese.class.getClassLoader().getResourceAsStream(configPath); try { // 加载配置文件 props.load(in); } catch (IOException e) { e.printStackTrace(); } // 获取属性值 String name = props.getProperty("name"); System.out.println("name=" + name); } }
六、总结
本文介绍了如何使用 Properties 类读取配置文件。读取配置文件可以使用不同的方式,包括使用 Properties 类提供的 load()、load(InputStream) 和 loadFromXML(InputStream) 方法、使用 ResourceBundle 类等等。同时,读取properties文件中的数组、特殊字符、中文字符也有一定的技巧。