讀取Jar包外面的配置檔案
阿新 • • 發佈:2018-11-12
比較常用的方法是將properties檔案直接打入JAR包中,然後使用Properties類進行讀取。有時候也需要讀取在JAR外面的配置檔案。廢話不多說,直接上程式碼:
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.NoSuchElementException; import java.util.Properties; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CfgFileUitls { private static final Logger logger = LoggerFactory.getLogger(PropertyUtils.class); private static Properties properties; public static String getObject(String prepKey) { return properties.getProperty(prepKey); } public CfgFileUitls(String... resourcesPaths) { properties = loadProperties(resourcesPaths); } public Properties getProperties() { return properties; } /** * 取出Property,但以System的Property優先,取不到返回空字串. */ private String getValue(String key) { String systemProperty = System.getProperty(key); if (systemProperty != null) { return systemProperty; } if (properties.containsKey(key)) { return properties.getProperty(key); } return ""; } /** * 取出String型別的Property,但以System的Property優先,如果都為Null則丟擲異常. */ public String getProperty(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return value; } /** * 取出String型別的Property,但以System的Property優先.如果都為Null則返回Default值. */ public String getProperty(String key, String defaultValue) { String value = getValue(key); return value != null ? value : defaultValue; } /** * 取出Integer型別的Property,但以System的Property優先.如果都為Null或內容錯誤則丟擲異常. */ public Integer getInteger(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Integer.valueOf(value); } /** * 取出Integer型別的Property,但以System的Property優先.如果都為Null則返回Default值,如果內容錯誤則丟擲異常 */ public Integer getInteger(String key, Integer defaultValue) { String value = getValue(key); return value != null ? Integer.valueOf(value) : defaultValue; } /** * 取出Double型別的Property,但以System的Property優先.如果都為Null或內容錯誤則丟擲異常. */ public Double getDouble(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Double.valueOf(value); } /** * 取出Double型別的Property,但以System的Property優先.如果都為Null則返回Default值,如果內容錯誤則丟擲異常 */ public Double getDouble(String key, Integer defaultValue) { String value = getValue(key); return value != null ? Double.valueOf(value) : defaultValue; } /** * 取出Boolean型別的Property,但以System的Property優先.如果都為Null丟擲異常,如果內容不是true/false則返回false. */ public Boolean getBoolean(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Boolean.valueOf(value); } /** * 取出Boolean型別的Property,但以System的Property優先.如果都為Null則返回Default值,如果內容不為true/false則返回false. */ public Boolean getBoolean(String key, boolean defaultValue) { String value = getValue(key); return value != null ? Boolean.valueOf(value) : defaultValue; } /** * 載入多個檔案, 檔案路徑使用Spring Resource格式. */ private Properties loadProperties(String... resourcesPaths) { Properties props = new Properties(); for (String location : resourcesPaths) { // logger.debug("Loading properties file from:" + location); InputStream is = null; try { is = new BufferedInputStream(new FileInputStream(location)); props.load(is); } catch (IOException ex) { logger.info("Could not load properties from path:" + location + ", " + ex.getMessage()); } finally { IOUtils.closeQuietly(is); } } return props; } }