import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Properties;
public class PropertyUtil {
private static final String INIT_FILE_PATH = "resourse/common.properties";
private static final Properties properties;
private PropertyUtil() throws Exception {
}
static {
properties = new Properties();
try {
properties.load(Files.newBufferedReader(Paths.get(INIT_FILE_PATH), StandardCharsets.UTF_8));
} catch (IOException e) {
// ファイル読み込みに失敗
System.out.println(String.format("ファイルの読み込みに失敗しました。ファイル名:%s", INIT_FILE_PATH));
}
}
/**
* プロパティ値を取得する
*
* @param key キー
* @return 値
* @throws Exception
*/
public static String getProperty(final String key) throws Exception {
return getProperty(key, "");
}
/**
* プロパティ値を取得する
*
* @param key キー
* @param defaultValue デフォルト値
* @return キーが存在しない場合、デフォルト値
* 存在する場合、値
* @throws Exception
*/
public static String getProperty(final String key, final String defaultValue) throws Exception {
if (properties.isEmpty()) {
throw new Exception("プロパティが存在しません。");
}
if (properties.getProperty(key, defaultValue).isEmpty()) {
throw new Exception("プロパティが取得できません。キー;" + key);
}
return properties.getProperty(key, defaultValue);
}
}
// 呼び出し
String str;
try {
str = PropertyUtil.getProperty("test");
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
アドバイス
staticイニシャライザでは例外をthrowできない。
staticイニシャライザ内で発生した例外がthrowされた場合、そのクラスは永久に初期化が完了せず、プログラム中から永久に使用できない。