遇到问题
在编写某个多模块项目的某个类时,在方法中使用Properties读取配置文件,出现的错误。
这里假定项目名为project,模块名为modular。
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class APP{
public static void main(String[] args) throws IOException {
Properties properties = new Properties();
properties.load(
new FileInputStream("modular/src/main/resources/dataBase.properties")); //modular是当前模块名
System.out.println(properties.getProperty("Driver"));
}
@Test
public void quick()throws IOException{
Properties properties = new Properties();
properties.load(
new FileInputStream("modular/src/main/resources/dataBase.properties"));
System.out.println(properties.getProperty("Driver"));
}
}
具体过程如下:
最开始,我在主方法中使用 Properties 来获取配置文件,使用路径如上,我成功的读取到了配置文件信息。
然后我又在测试方法中使用完全相同的代码,结果却发现 java.io.FileNotFoundException 异常,这实在太奇怪了,为什么完全相同的代码却会发生问题?
既然主方法读的到配置文件,那么说明文件路径没问题,可是测试方法却爆出这个问题,说明路径有问题,完全相同的代码,为啥变位置路径就出错了?
解决尝试
首先我是认为是不是本类导入了什么错的包,于是在当前模块下建了一个新的类,并只写入了以上的两个方法,且只引入相关必须包。结果发现问题任然存在。
然后我怀疑这是不是项目结构或者内部类路径本身出了问题?我就新建了一个项目,并把上面重写的的新类复制进去,结果发现运行成功了。
百思不得其解,我突然意识到,会不会是测试方法的路径真的有问题?即主方法和测试方法访问文件时使用的相对路径的默认根路径不同?
于是我做这样的测试:在主方法和测试方法中都写入
File file = new File("测试用文件夹");
file.mkdir();
运行这个代码,会在默认的根目录下生成一个新的文件夹。
果然!
运行主方法,生成的文件夹在项目文件夹下,和模块文件夹同级!
运行测试方法。生成的文件夹在模块文件夹下,和src文件夹同级!!
所以说 多模块项目中,模块的某个类的主方法和测试方法,他们文件访问的相对路径的根目录不同
问题解决
只要把测试方法中的路径改成 src/main/resources/dataBase.properties 问题就解决了
然而我还是不知道这是为什么?这里就先记下来。
标签:路径,Properties,文件夹,相对路径,模块,根目录,properties,测试方法 From: https://www.cnblogs.com/Akiyama-tsuki/p/18395197