做项目的时候,经常会用到配置文件,因为很多情景下数据都是活的,而配置文件也可以根据情况随时修改,这里记录一下读取配置文件的方法以及获取指定名称的内容的方法,方便以后使用。 1、文件名称:webApp.properties,在src目录下,内容为:
package com.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public final class WebAppConfig {
/**
* 私有构造方法,不能创建对象
*/
private WebAppConfig() {
}
/***
*
* @param key:properties文件中各个选项的name值
* @return String:与name值对应的value值
*/
public static String app(String key){
String value=null;
if(key!=null && key.trim().length()>0){
Properties prop = new Properties();
//读取指定的文件
InputStream in = WebAppConfig.class.getResourceAsStream("/webApp.properties");
try {
prop.load(in);
value = prop.getProperty(key).trim();
} catch (IOException e) {
e.printStackTrace();
}
}
return value;
}
public static void main(String[] args){
String savePath = app("businessFilePath");
System.out.println(savePath);
}
}
2、在别处进行调用:
/**
* 该方法用来获取允许上传的文件大小
* **/
public long getFileBuffer(){
long buffer = 200*1024*1024;//文件上传允许最大为200M
String fileSize = com.tzj.tsp.util.WebAppConfig.app("businessFileSize");
if(fileSize!=null){//说明有设置值
fileSize = fileSize.trim();
//有设置值且是数字
if(fileSize.length()>0 && isNumeric(fileSize)){
buffer = Integer.parseInt(fileSize)*1024*1024;
}
}
return buffer;
}
3、可能遇到的问题:在使用类似的读取配置文件内容的功能时,可能会遇到:
在本类之中使用main方法调用没有问题,但是在别的类中却报“空指针异常”,无论这个类是是不是其子类、是不是与其处于同一个目录。 我当时碰到这个的时候,是因为这句代码:WebAppConfig.class.getResourceAsStream("/webApp.properties"),当时写的不是WebAppConfig.class,而是Object.class。
当使用”Object.class.getResourceAsStream("/webApp.properties");“去读取配置文件时,就会出现上面提到的情况,即本类中调用成功其他类中调用失败。
改成”WebAppConfig.class.getResourceAsStream("/webApp.properties");“来加载配置文件,无论在哪里调用都没有问题。而这个WebAppConfig则是该java文件的名称。
所以,在读取配置的时候,使用"文件名称.class.getResourceAsStream("/webApp.properties")"来加载配置文件就能解决上面的问题啦。