多模块项目中,模块的某个类的主方法和测试方法,他们文件访问的相对路径的根目录不同
遇到问题
在编写某个多模块项目的某个类时,在方法中使用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 问题就解决了
然而我还是不知道这是为什么?这里就先记下来。
posted on 2024-09-03 18:54 Akiyama_tsuki 阅读(8) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义