Akiyama_tsuki

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

多模块项目中,模块的某个类的主方法和测试方法,他们文件访问的相对路径的根目录不同

遇到问题

在编写某个多模块项目的某个类时,在方法中使用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   Akiyama_tsuki  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示