java 读取多个properties_java读取properties文件方法

简介

我们在做一些Java应用开发的时候,会将很多环境特定的变量定义到一个配置文件中。比较常见的定义文件有xml, properties,甚至txt等格式的。在Java里有一个类似于标准配置格式的文件,就是.properties类型的文件。它主要用来存储一些名值对的内容,里面的内容都存成如propertyname=propertyvalue这种样式。读取properties文件的方法有很多种,网上也有大量的说明,这里主要针对两种典型的方式做一个对比。

问题场景

现在假定我们有一个config.properties的文件,里面存有如下的内容信息:

Java代码

dbpassword=password

database=localhost

dbuser=user

我们希望通过程序来读取它的内容。

粗粗一看,这问题实在是太简单了,且看我们的第一个方法:

File IO

我们可以直接通过File Stream的经典方式来读文件,然后解析一把出来不就可以了么?这种实现的代码如下::

Java代码

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.util.Properties;

publicclassApp {

publicstaticvoidmain(String[] args) {

Properties prop = newProperties();

try{

prop.load(newFileInputStream("config/config.properties"));

System.out.println(prop.getProperty("database"));

System.out.println(prop.getProperty("dbuser"));

System.out.println(prop.getProperty("dbpassword"));

} catch(IOException e) {

e.printStackTrace();

}

}

}

这部分代码几乎没什么可说的,就是通过创建一个java.util.Properties的对象,然后在指定properties文件之后通过FileInputStream读取它,将这个InputStream作为参数传给properties对象。properties对象的load方法就把结果解析出来了。我们执行它之后就会看到一个如下的结果:

Java代码

localhost

user

password

还有一个要注意的地方就是,我们在传递给FileInputStream的路径是当前的相对路径,也就是说我们必须把config.properties文件放到我class文件所在目录的一个config字目录下。

现在,在考虑其他方式之前,我们看看FileInputStream这种方式的特点。我们读取properties文件的时候必须要知道它所在的路径。采用FileInputStream的时候我们必须将文件的路径传递给程序。否则程序找不到文件后会出现异常。考虑到我们的程序很多时候是编译后要部署到不同的生产环境的,如果每个环境不一样,难道我们每次都要来修改这个程序吗?或者说我们将配置文件所在的路径还要作为一个参数传给程序?这两种方式很明显不太合适。那么有没有什么法子比如说我不需要修改程序或者刻意传参数给程序就搞定了呢?另外一种方法可以达到这个理想的结果。

classloader

采用classloader的方式主要是通过它的getResourceAsStream方法来实现加载properties文件。具体细节我们可以看如下的示例:

Java代码

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.util.Properties;

publicclassNewApp {

publicstaticvoidmain(String[] args) {

Properties prop = newProperties();

try{

prop.load(NewApp.class.getClassLoader().getResourceAsStream("config.properties"));

System.out.println(prop.getProperty("database"));

System.out.println(prop.getProperty("dbuser"));

System.out.println(prop.getProperty("dbpassword"));

} catch(IOException e) {

e.printStackTrace();

}

}

}

这里我们并没有指定一个特定的路径给classloader,我们只是将文件名直接传给了它。如果我们将config.properties文件和class文件放在同一个目录下,结果运行正常。如果我们将properties放到其他地方则会碰到错误:

要注意的问题:

若该类的存放路径是D:\com\file\FileUtility.java

包名:package com.file ;

属性文件的路径问题—

★若传递的文件名是“test.property”,则text. Property文件应该放在D:\com\file目录下;

★若传递的文件名是“/test.property”,则text. Property文件应该放在D:\目录下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值