package com.wang.util;
import java.io.IOException;
import java.io.InputStream;
import java.security.AccessControlException;
import java.util.Properties;
/**
* 读取classpath的properties文件
*
* @author 18771
*
*/
public class PropertiesUtils {
public Properties readProperties() throws Exception {
InputStream in = null;
Properties props = null;
try {ClassLoader cl = getClass().getClassLoader();
if (cl == null)
cl = findClassloader();
if (cl == null)
throw new Exception("Unable to find a class loader on the current thread or class.");
in = cl.getResourceAsStream("quartz.properties");
if (in == null) {
in = cl.getResourceAsStream("/quartz.properties");
}
if (in == null) {
in = cl.getResourceAsStream("org/quartz/quartz.properties");
}
Exception initException;
if (in == null) {
initException = new Exception("Default quartz.properties not found in class path");
throw initException;
}
try {
props.load(in);
} catch (IOException ioe) {
initException = new Exception("Resource properties file: 'org/quartz/quartz.properties' "
+ "could not be read from the classpath.", ioe);
throw initException;
}} finally {
if (in != null) {
try {
in.close();
} catch (IOException ignore) {}
}
}
if (props == null) {
return overrideWithSysProps(props);
}return props;
} /**
* Add all System properties to the given props. Will override
* any properties that already exist in the given props.
*/
private Properties overrideWithSysProps(Properties props) {
Properties sysProps = null;
try {
sysProps = System.getProperties();
} catch (AccessControlException e) {}if (sysProps != null) {
props.putAll(sysProps);
}return props;
} private ClassLoader findClassloader() {
// work-around set context loader for windows-service started jvms
// (QUARTZ-748)
if (Thread.currentThread().getContextClassLoader() == null && getClass().getClassLoader() != null) {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
}
return Thread.currentThread().getContextClassLoader();
}}
/*
* Copyright 2001-2009 Terracotta, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
*http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
*/package com.wang.util;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Properties;
import java.util.StringTokenizer;
/**
* 【读取jar中Properties文件】 * This is an utility calss used to parse the properties.
*
*
* @author James House
*/
public class PropertiesParser {/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Data members.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/Properties props = null;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Constructors.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/public PropertiesParser(Properties props) {
this.props = props;
}/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Interface.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/public Properties getUnderlyingProperties() {
return props;
}/**
* Get the trimmed String value of the property with the given
* name.If the value the empty String (after
* trimming), then it returns null.
*/
public String getStringProperty(String name) {
return getStringProperty(name, null);
}/**
* Get the trimmed String value of the property with the given
* name or the given default value if the value is
* null or empty after trimming.
*/
public String getStringProperty(String name, String def) {
String val = props.getProperty(name, def);
if (val == null) {
return def;
}val = val.trim();
return (val.length() == 0) ? def : val;
}public String[] getStringArrayProperty(String name) {
return getStringArrayProperty(name, null);
}public String[] getStringArrayProperty(String name, String[] def) {
String vals = getStringProperty(name);
if (vals == null) {
return def;
}StringTokenizer stok = new StringTokenizer(vals, ",");
ArrayList> strs = new ArrayList>();
try {
while (stok.hasMoreTokens()) {
strs.add(stok.nextToken().trim());
}return (String[])strs.toArray(new String[strs.size()]);
} catch (Exception e) {
return def;
}
}public boolean getBooleanProperty(String name) {
return getBooleanProperty(name, false);
}public boolean getBooleanProperty(String name, boolean def) {
String val = getStringProperty(name);
return (val == null) ? def : Boolean.valueOf(val).booleanValue();
}public byte getByteProperty(String name) throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
throw new NumberFormatException(" null string");
}try {
return Byte.parseByte(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public byte getByteProperty(String name, byte def)
throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
return def;
}try {
return Byte.parseByte(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public char getCharProperty(String name) {
return getCharProperty(name, '\0');
}public char getCharProperty(String name, char def) {
String param = getStringProperty(name);
return(param == null) ? def : param.charAt(0);
}public double getDoubleProperty(String name) throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
throw new NumberFormatException(" null string");
}try {
return Double.parseDouble(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public double getDoubleProperty(String name, double def)
throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
return def;
}try {
return Double.parseDouble(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public float getFloatProperty(String name) throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
throw new NumberFormatException(" null string");
}try {
return Float.parseFloat(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public float getFloatProperty(String name, float def)
throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
return def;
}try {
return Float.parseFloat(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public int getIntProperty(String name) throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
throw new NumberFormatException(" null string");
}try {
return Integer.parseInt(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public int getIntProperty(String name, int def)
throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
return def;
}try {
return Integer.parseInt(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public int[] getIntArrayProperty(String name) throws NumberFormatException {
return getIntArrayProperty(name, null);
}public int[] getIntArrayProperty(String name, int[] def)
throws NumberFormatException {
String vals = getStringProperty(name);
if (vals == null) {
return def;
}StringTokenizer stok = new StringTokenizer(vals, ",");
ArrayList ints = new ArrayList();
try {
while (stok.hasMoreTokens()) {
try {
ints.add(new Integer(stok.nextToken().trim()));
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + vals + "'");
}
}int[] outInts = new int[ints.size()];
for (int i = 0;
i < ints.size();
i++) {
outInts[i] = ((Integer)ints.get(i)).intValue();
}
return outInts;
} catch (Exception e) {
return def;
}
}public long getLongProperty(String name) throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
throw new NumberFormatException(" null string");
}try {
return Long.parseLong(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public long getLongProperty(String name, long def)
throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
return def;
}try {
return Long.parseLong(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public short getShortProperty(String name) throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
throw new NumberFormatException(" null string");
}try {
return Short.parseShort(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public short getShortProperty(String name, short def)
throws NumberFormatException {
String val = getStringProperty(name);
if (val == null) {
return def;
}try {
return Short.parseShort(val);
} catch (NumberFormatException nfe) {
throw new NumberFormatException(" '" + val + "'");
}
}public String[] getPropertyGroups(String prefix) {
Enumeration> keys = props.propertyNames();
HashSet> groups = new HashSet>(10);
if (!prefix.endsWith(".")) {
prefix += ".";
}while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
if (key.startsWith(prefix)) {
String groupName = key.substring(prefix.length(), key.indexOf(
'.', prefix.length()));
groups.add(groupName);
}
}return (String[]) groups.toArray(new String[groups.size()]);
}public Properties getPropertyGroup(String prefix) {
return getPropertyGroup(prefix, false, null);
}public Properties getPropertyGroup(String prefix, boolean stripPrefix) {
return getPropertyGroup(prefix, stripPrefix, null);
}/**
* Get all properties that start with the given prefix.
*
* @param prefix The prefix for which to search.If it does not end in
*a "." then one will be added to it for search purposes.
* @param stripPrefix Whether to strip off the given prefix
*in the result's keys.
* @param excludedPrefixes Optional array of fully qualified prefixes to
*exclude.For example if prefix is "a.b.c", then
*excludedPrefixes might be "a.b.c.ignore".
*
* @return Group of Properties that start with the given prefix,
*optionally have that prefix removed, and do not include properties
*that start with one of the given excluded prefixes.
*/
public Properties getPropertyGroup(String prefix, boolean stripPrefix, String[] excludedPrefixes) {
Enumeration> keys = props.propertyNames();
Properties group = new Properties();
if (!prefix.endsWith(".")) {
prefix += ".";
}while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
if (key.startsWith(prefix)) {boolean exclude = false;
if (excludedPrefixes != null) {
for (int i = 0;
(i < excludedPrefixes.length) && (exclude == false);
i++) {
exclude = key.startsWith(excludedPrefixes[i]);
}
}if (exclude == false) {
String value = https://www.it610.com/article/getStringProperty(key,"");
if (stripPrefix) {
group.put(key.substring(prefix.length()), value);
} else {
group.put(key, value);
}
}
}
}return group;
}
}