从一个 Class 而不是另一个读取 Java 中的属性文件时没有这样的文件或目录
No such file or directory when reading Properties File in Java from one Class but not another
我正在尝试从该路径读取与存储库根相关的属性文件夹:
rest/src/main/resources/cognito.properties
我有一个来自此路径的 Class CognitoData
:rest/src/main/java/com/bitorb/admin/webapp/security/cognito/CognitoData.java
它使用此代码加载 Properties 文件夹,并且运行良好:
new CognitoProperties().loadProperties("rest/src/main/resources/cognito.properties");
@Slf4j
public class CognitoProperties {
public Properties loadProperties(String fileName) {
Properties cognitoProperties = new Properties();
try {
@Cleanup
FileInputStream fileInputStream = new FileInputStream(fileName);
cognitoProperties.load(fileInputStream);
} catch (IOException e) {
log.error("Error occured. Exception message was [" + e.getMessage() + "]");
}
return cognitoProperties;
}
}
但是,当我从位于 rest/src/test/java/com/bitorb/admin/webapp/security/cognito/CognitoServiceTest.java
的测试 class 中调用 CognitoData
时,出现此错误:
[rest/src/main/resources/cognito.properties (No such file or directory)]
任何人都可以解释为什么会这样吗?
我不知道你用什么测试,但我怀疑你运行测试时的工作目录不是项目根目录。
一种解决方案是改用绝对路径:
/absolute/path/to/project/rest/src/main/resources/cognito.properties
或者在测试时检查工作目录是什么,看看是否可以更改为项目根目录。
在那种情况下,文件目录实际上不是相对的。您需要为此提供适当的文件路径。如果您已经在使用 spring 启动,那么
您可以将代码更改为:
// this will read file from the resource folder.
InputStream inputStream = getClass().getClassLoader()
.getResourceAsStream("cognito.properties");
cognitoProperties.load(inputStream);
否则您需要提供完整的绝对路径。 new CognitoProperties().loadProperties("/absolutepath/..../cognito.properties")
我正在尝试从该路径读取与存储库根相关的属性文件夹:
rest/src/main/resources/cognito.properties
我有一个来自此路径的 Class CognitoData
:rest/src/main/java/com/bitorb/admin/webapp/security/cognito/CognitoData.java
它使用此代码加载 Properties 文件夹,并且运行良好:
new CognitoProperties().loadProperties("rest/src/main/resources/cognito.properties");
@Slf4j
public class CognitoProperties {
public Properties loadProperties(String fileName) {
Properties cognitoProperties = new Properties();
try {
@Cleanup
FileInputStream fileInputStream = new FileInputStream(fileName);
cognitoProperties.load(fileInputStream);
} catch (IOException e) {
log.error("Error occured. Exception message was [" + e.getMessage() + "]");
}
return cognitoProperties;
}
}
但是,当我从位于 rest/src/test/java/com/bitorb/admin/webapp/security/cognito/CognitoServiceTest.java
的测试 class 中调用 CognitoData
时,出现此错误:
[rest/src/main/resources/cognito.properties (No such file or directory)]
任何人都可以解释为什么会这样吗?
我不知道你用什么测试,但我怀疑你运行测试时的工作目录不是项目根目录。
一种解决方案是改用绝对路径:
/absolute/path/to/project/rest/src/main/resources/cognito.properties
或者在测试时检查工作目录是什么,看看是否可以更改为项目根目录。
在那种情况下,文件目录实际上不是相对的。您需要为此提供适当的文件路径。如果您已经在使用 spring 启动,那么 您可以将代码更改为:
// this will read file from the resource folder.
InputStream inputStream = getClass().getClassLoader()
.getResourceAsStream("cognito.properties");
cognitoProperties.load(inputStream);
否则您需要提供完整的绝对路径。 new CognitoProperties().loadProperties("/absolutepath/..../cognito.properties")