gpt4 book ai didi

java - 如何检查属性文件路径是否设置正确

转载 作者:行者123 更新时间:2023-11-30 01:58:58 25 4
gpt4 key购买 nike

我有以下代码。

public class PropertyReader {

private static Properties propsPath = new Properties();
private static Properties propsConf = new Properties();
private static PropertyReader instance = new PropertyReader();

private PropertyReader() {

readConfProperty();
}

private void readConfProperty() throws RuntimeException {

try {
String path = "";

if (System.getProperty("os.name").contains("Linux")) {
//path = System.getProperty("catalina.home") + "conf/businessportal.properties";
path = System.getProperty("/busDir/src/main/resources/businessportal.properties");
} else {
// path = System.getProperty("catalina.home") + "\\conf\\businessportal.properties";
path = System.getProperty("/busDir/src/main/resources/businessportal.properties");
}

Reader reader = new FileReader(path);
propsConf.load(reader);
} catch(Exception e) {
e.printStackTrace();
}
}
}

如何检查属性文件路径是否设置正确并且可以从中访问数据?

最佳答案

您似乎不太了解系统属性是如何工作的,以下是回答您的问题之前的简短解释:

系统属性用于在启动时将值传递给 JVM 或在运行时设置它们,可以使用 System#getProperty 检索这些值。方法,方法是在 JVM 启动时或在运行时设置时向其传递关联的名称。

1- 在 JVM 启动时传递系统属性

java -DmyVar=foo -cp myApp.jar pack.age.MyApp bar bat

在此示例中,您可以使用

检索 myVar
String myVar = System.getProperty("myVar");

在此调用之后,变量myVar 将具有值foobarbat 无法通过这种方式检索,它们是应用程序的参数,并按照您在主方法的参数数组中传递它们的顺序出现。

2 - 在运行时设置系统属性

System.setProperty("myVar", "foo")

稍后使用与之前相同的调用,您可以再次检索该值。

现在回答你的问题:

1-您在 Activity 代码中的调用不正确,因为 /busDir/src/main/resources/businessportal.properties 似乎是您愿意获得的值,而不是您定义的名称将在您的应用程序中用于查找它。

您应该使用类似这样的方式传递值,如上所示,通过在启动应用程序时设置 -D 参数:

-Dbusinessportal.config.path=/busDir/src/main/resources/businessportal.properties

然后在您的方法中检索它

String path = System.getProperty("businessportal.config.path");

此时,您将拥有一个包含配置文件路径的字符串,您可以继续检查其是否存在,如下所示:

private void readConProperty() throws IOException {
String strPath = System.getProperty("businessportal.config.path");
if (null == strPath) {
throw new RuntimeException("property businessportal.config.path not defined");
}

try (InputStream is = Files.newInputStream(Paths.get(strPath))) {
propsConf.load(is);
} catch (IOException e) {
throw new RuntimeException(String
.format("Error while loading config from %s", strPath), e);
}
}

2-您不需要检查应用程序实际运行在哪个操作系统上,以便选择正确的文件分隔符,因为首先,当您的应用程序启动时,您已经知道可以传递正确的文件路径,其次,java 文件系统 API 在后台为您处理此问题,并且只要路径跨平台兼容,就可以在每个环境上使用 \/,这就是对于大多数相对路径和 Windows 绝对路径,如果省略驱动器号并且您的应用程序在同一驱动器上启动,则情况如此。因此,您不能在 unix 系统上使用类似 C:\\conf\businessportal.properties 的内容,因为显然它包含一个仅适用于 Windows 主机的典型驱动器号。

3-最后,我看到您的属性文件位于源代码中的资源下。您将无法直接从文件系统加载它,因为当您的应用程序打包时,路径 src/main/resources 将不存在,并且所有内容都将打包到您的应用程序的存档中并存在在您应用程序的类路径上。然后您需要使用 Class#getResourceAsStream 加载它并向其传递资源名称,如下所示:

private void readConProperty() {
String resourceName = "/businessportal.properties";
try (InputStream is = getClass().getResourceAsStream(resourceName)) {
if (null == is) {
throw new RuntimeException(String
.format("Resource %s is not available", resourceName));
}
propsConf.load(is);
} catch (IOException e) {
throw new RuntimeException(String
.format("Error while loading config from %s", resourceName), e);
}
}

关于java - 如何检查属性文件路径是否设置正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53478345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com