gpt4 book ai didi

java - 如何 : Dynamically-defined properties in Java

转载 作者:行者123 更新时间:2023-11-29 06:20:48 25 4
gpt4 key购买 nike

如何在 Java 中动态定义一些属性。现在,我使用的是属性文件,但我需要在安装前更改这些属性,所以这些属性应该在 jar(或安装)文件之外的文件中设置。

这些属性定义了我的 IBatis 连接。

最佳答案

继续使用 .properties 并将文件作为资源加载。

如果它在类路径中,它将被找到。

我使用的是资源包,因为它对我来说更容易。

编辑

如果该文件在您的类路径中,您可以将其作为资源加载:Some.class.loadResource(...) 或者我所做的是使用 ResourceBundle,它的作用基本相同.

例如,如果我有:

import java.util.ResourceBundle;

public class ResourceBundleTest {
public static void main( String [] args ) {
ResourceBundle bundle = ResourceBundle.getBundle("connection");
for( String key: bundle.keySet() ){
System.out.printf("bundle[%s]=%s%n",key, bundle.getString(key));
}
}
}

如果在类路径中,我可以加载该文件。该属性在外面,在“some/nested/dir”

$ls -l some/nested/dir/
total 8
-rw-r--r-- 1 oscarreyes staff 35 Jun 25 12:06 connection.properties
$cat some/nested/dir/connection.properties
name=Oscar
lastName=Reyes
age=0x1F

如果我在没有将该目录添加到我的类路径的情况下运行它,它将无法工作:

$java ResourceBundleTest 
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name connection, locale es_ES
at java.ut...ceBundle.java:1427)
at java.ut...urceBundle.java:1250)
at java.ut...ceBundle.java:705)
at Resourc...st.java:6)

但是如果我将该目录添加到我的类路径中,那么该文件将很容易找到。

$java -cp some/nested/dir/:.  ResourceBundleTest 
bundle[lastName]=Reyes
bundle[age]=0x1F
bundle[name]=Oscar
$

以类似的方式,您可以拥有一个 .jar 文件,并将您的 .properties 文件放在您想要的任何位置,您只需将它包含在您的类路径中即可。

等效的使用属性是:

import java.util.Properties;

public class LoadProperties {
public static void main( String [] args ) throws java.io.IOException {
Properties properties = new Properties();
properties.load( LoadProperties.class.getResourceAsStream("connection.properties"));
properties.list( System.out );
}
}

但出于某种原因我更喜欢资源包。

关于java - 如何 : Dynamically-defined properties in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119885/

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