回答:
com.al.common.email.templates
使用できるパッケージのクラスからプロパティをロードするとき
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close();
(必要な例外処理をすべて追加します)。
クラスがそのパッケージにない場合は、InputStreamを少し異なる方法で取得する必要があります。
InputStream in =
getClass().getResourceAsStream("/com/al/common/email/templates/foo.properties");
相対パスで(リーディング「/」のないもの)getResource()
/ getResourceAsStream()
リソースがクラスが入っているパッケージを表すディレクトリに対して検索されることを意味します。
を使用java.lang.String.class.getResource("foo.txt")
すると/java/lang/String/foo.txt
、クラスパスで(存在しない)ファイルが検索されます。
絶対パス(「/」で始まるパス)を使用すると、現在のパッケージは無視されます。
ヨアヒムザウアーの答えに追加するには、これを静的なコンテキストで行う必要がある場合は、次のようなことを行うことができます:
static {
Properties prop = new Properties();
InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties");
prop.load(in);
in.close()
}
(以前と同様に、例外処理が省略されています。)
resources
フォルダーにあるプロパティファイルを読み取る方法maven
次の2つのケースは、という名前のサンプルクラスからのプロパティファイルのロードに関連していますTestLoadProperties
。
ケース1:を使用してプロパティファイルをロードする ClassLoader
InputStream inputStream = TestLoadProperties.class.getClassLoader()
.getResourceAsStream("A.config");
properties.load(inputStream);
この場合、root/src
正常にロードするには、プロパティファイルがディレクトリにある必要があります。
ケース2:プロパティファイルを使用せずに読み込む ClassLoader
InputStream inputStream = getClass().getResourceAsStream("A.config");
properties.load(inputStream);
この場合、TestLoadProperties.class
正常にロードするには、プロパティファイルがファイルと同じディレクトリにある必要があります。
注: TestLoadProperties.java
およびTestLoadProperties.class
は2つの異なるファイルです。前者の.java
ファイルは通常プロジェクトのsrc/
ディレクトリにあり、後者の.class
ファイルは通常そのプロジェクトのディレクトリにありますbin/
。
public class Test{
static {
loadProperties();
}
static Properties prop;
private static void loadProperties() {
prop = new Properties();
InputStream in = Test.class
.getResourceAsStream("test.properties");
try {
prop.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public class ReadPropertyDemo {
public static void main(String[] args) {
Properties properties = new Properties();
try {
properties.load(new FileInputStream(
"com/technicalkeeda/demo/application.properties"));
System.out.println("Domain :- " + properties.getProperty("domain"));
System.out.println("Website Age :- "
+ properties.getProperty("website_age"));
System.out.println("Founder :- " + properties.getProperty("founder"));
// Display all the values in the form of key value
for (String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
System.out.println("Key:- " + key + "Value:- " + value);
}
} catch (IOException e) {
System.out.println("Exception Occurred" + e.getMessage());
}
}
}
そのloadメソッドを介してPropertiesクラスを使用していると仮定すると、入力ストリームを取得するためにClassLoader getResourceAsStreamを使用していると思います。
名前をどのように渡していますか、この形式である必要があります: /com/al/common/email/templates/foo.properties
クラスのパッケージを処理する必要がなく、上記と同様の、しかしより簡単なソリューションについては誰も言及していません。myfile.propertiesがクラスパスにあると仮定します。
Properties properties = new Properties();
InputStream in = ClassLoader.getSystemResourceAsStream("myfile.properties");
properties.load(in);
in.close();
楽しい
以下のコードを使用してください:
プロパティp = 新しいプロパティ(); StringBuffer path = new StringBuffer ("com / al / common / email / templates /" );
パス。追加("foo.properties" ); InputStream fs = getClass ()。getClassLoader ()。getResourceAsStream (パス。のtoString ())。
if(fs == null){
System.err.println("Unable to load the properties file");
}
else{
try{
p.load(fs);
}
catch (IOException e) {
e.printStackTrace();
}
}