当从一个类而不是另一个类中读取Java属性文件时,没有这样的文件或目录

当从一个类而不是另一个类中读取Java属性文件时,没有这样的文件或目录,java,exception,ioexception,fileinputstream,Java,Exception,Ioexception,Fileinputstream,我正在尝试从此路径读取与存储库根目录相关的属性文件夹: rest/src/main/resources/cognito.properties 我有一个类CognitoData来自这个路径:rest/src/main/java/com/bitorb/admin/webapp/security/cognito/CognitoData.java,它使用这个代码加载属性文件夹,并且运行正常: new CognitoProperties().loadProperties("rest/src/main/r

我正在尝试从此路径读取与存储库根目录相关的属性文件夹:

rest/src/main/resources/cognito.properties
我有一个类
CognitoData
来自这个路径:
rest/src/main/java/com/bitorb/admin/webapp/security/cognito/CognitoData.java
,它使用这个代码加载属性文件夹,并且运行正常:

new CognitoProperties().loadProperties("rest/src/main/resources/cognito.properties");
但是,当我从位于
rest/src/test/java/com/bitorb/admin/webapp/security/cognito/CognitoServiceTest.java
中的测试类调用
CognitoData
时,我得到以下错误:

[rest/src/main/resources/cognito.properties (No such file or directory)]

有人能解释为什么会发生这种情况吗

我不知道您在使用什么进行测试,但我怀疑运行测试时的工作目录不是项目根目录

一种解决方案是使用绝对路径:

/absolute/path/to/project/rest/src/main/resources/cognito.properties

或者在测试期间检查什么是工作目录,看看是否可以将其更改为项目根。

我不知道您在测试时使用的是什么,但我怀疑运行测试时的工作目录不是项目根目录

一种解决方案是使用绝对路径:

/absolute/path/to/project/rest/src/main/resources/cognito.properties

或者在测试过程中检查什么是工作目录,看看是否可以将其更改为项目根目录。

在这种情况下,文件目录实际上不是相对的。您需要为此提供适当的文件路径。如果您已经在使用spring boot,那么 您可以将代码更改为:

// this will read file from the resource folder.
InputStream inputStream = getClass().getClassLoader()
                          .getResourceAsStream("cognito.properties");

cognitoProperties.load(inputStream);


否则,您需要提供完整的绝对路径
newcognitoproperties().loadProperties(“/absolutepath/…/cognito.properties”)

在这种情况下,文件目录实际上不是相对的。您需要为此提供适当的文件路径。如果您已经在使用spring boot,那么 您可以将代码更改为:

// this will read file from the resource folder.
InputStream inputStream = getClass().getClassLoader()
                          .getResourceAsStream("cognito.properties");

cognitoProperties.load(inputStream);


否则,您需要提供完整的绝对路径<代码>新建CognitoProperties().loadProperties(“/absolutepath/…/cognito.properties”)

即使使用spring boot仅提供cognito.properties也是不够的,因为单独使用FileInputStream构造函数无法将其传输到绝对地址,即使使用spring boot仅提供cognito.properties也是不够的,因为单独使用FileInputStream构造函数无法将其传输到绝对地址