Java封装 properties文件操作
/**
* Prop. Prop can load properties file from CLASSPATH or File object.
*/
public class Prop { private Properties properties = null; /**
* Prop constructor.
* @see #Prop(String, String)
*/
public Prop(String fileName) {
this(fileName, Const.DEFAULT_ENCODING);
} /**
* Prop constructor
* <p>
* Example:<br>
* Prop prop = new Prop("my_config.txt", "UTF-8");<br>
* String userName = prop.get("userName");<br><br>
*
* prop = new Prop("com/jfinal/file_in_sub_path_of_classpath.txt", "UTF-8");<br>
* String value = prop.get("key");
*
* @param fileName the properties file's name in classpath or the sub directory of classpath
* @param encoding the encoding
*/
public Prop(String fileName, String encoding) {
InputStream inputStream = null;
try {
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName); // properties.load(Prop.class.getResourceAsStream(fileName));
if (inputStream == null)
throw new IllegalArgumentException("Properties file not found in classpath: " + fileName);
properties = new Properties();
properties.load(new InputStreamReader(inputStream, encoding));
} catch (IOException e) {
throw new RuntimeException("Error loading properties file.", e);
}
finally {
if (inputStream != null) try {inputStream.close();} catch (IOException e) {e.printStackTrace();}
}
} /**
* Prop constructor.
* @see #Prop(File, String)
*/
public Prop(File file) {
this(file, Const.DEFAULT_ENCODING);
} /**
* Prop constructor
* <p>
* Example:<br>
* Prop prop = new Prop(new File("/var/config/my_config.txt"), "UTF-8");<br>
* String userName = prop.get("userName");
*
* @param file the properties File object
* @param encoding the encoding
*/
public Prop(File file, String encoding) {
if (file == null)
throw new IllegalArgumentException("File can not be null.");
if (file.isFile() == false)
throw new IllegalArgumentException("Not a file : " + file.getName()); InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
properties = new Properties();
properties.load(new InputStreamReader(inputStream, encoding));
} catch (IOException e) {
throw new RuntimeException("Error loading properties file.", e);
}
finally {
if (inputStream != null) try {inputStream.close();} catch (IOException e) {e.printStackTrace();}
}
} public String get(String key) {
return properties.getProperty(key);
} public String get(String key, String defaultValue) {
String value = get(key);
return (value != null) ? value : defaultValue;
} public Integer getInt(String key) {
String value = get(key);
return (value != null) ? Integer.parseInt(value) : null;
} public Integer getInt(String key, Integer defaultValue) {
String value = get(key);
return (value != null) ? Integer.parseInt(value) : defaultValue;
} public Long getLong(String key) {
String value = get(key);
return (value != null) ? Long.parseLong(value) : null;
} public Long getLong(String key, Long defaultValue) {
String value = get(key);
return (value != null) ? Long.parseLong(value) : defaultValue;
} public Boolean getBoolean(String key) {
String value = get(key);
return (value != null) ? Boolean.parseBoolean(value) : null;
} public Boolean getBoolean(String key, Boolean defaultValue) {
String value = get(key);
return (value != null) ? Boolean.parseBoolean(value) : defaultValue;
} public boolean containsKey(String key) {
return properties.containsKey(key);
} public Properties getProperties() {
return properties;
}
}
/**
* PropKit. PropKit can load properties file from CLASSPATH or File object.
*/
public class PropKit { private static Prop prop = null;
private static final Map<String, Prop> map = new ConcurrentHashMap<String, Prop>(); private PropKit() {} /**
* Using the properties file. It will loading the properties file if not loading.
* @see #use(String, String)
*/
public static Prop use(String fileName) {
return use(fileName, Const.DEFAULT_ENCODING);
} /**
* Using the properties file. It will loading the properties file if not loading.
* <p>
* Example:<br>
* PropKit.use("config.txt", "UTF-8");<br>
* PropKit.use("other_config.txt", "UTF-8");<br><br>
* String userName = PropKit.get("userName");<br>
* String password = PropKit.get("password");<br><br>
*
* userName = PropKit.use("other_config.txt").get("userName");<br>
* password = PropKit.use("other_config.txt").get("password");<br><br>
*
* PropKit.use("com/jfinal/config_in_sub_directory_of_classpath.txt");
*
* @param fileName the properties file's name in classpath or the sub directory of classpath
* @param encoding the encoding
*/
public static Prop use(String fileName, String encoding) {
Prop result = map.get(fileName);
if (result == null) {
result = new Prop(fileName, encoding);
map.put(fileName, result);
if (PropKit.prop == null)
PropKit.prop = result;
}
return result;
} /**
* Using the properties file bye File object. It will loading the properties file if not loading.
* @see #use(File, String)
*/
public static Prop use(File file) {
return use(file, Const.DEFAULT_ENCODING);
} /**
* Using the properties file bye File object. It will loading the properties file if not loading.
* <p>
* Example:<br>
* PropKit.use(new File("/var/config/my_config.txt"), "UTF-8");<br>
* Strig userName = PropKit.use("my_config.txt").get("userName");
*
* @param file the properties File object
* @param encoding the encoding
*/
public static Prop use(File file, String encoding) {
Prop result = map.get(file.getName());
if (result == null) {
result = new Prop(file, encoding);
map.put(file.getName(), result);
if (PropKit.prop == null)
PropKit.prop = result;
}
return result;
} public static Prop useless(String fileName) {
Prop previous = map.remove(fileName);
if (PropKit.prop == previous)
PropKit.prop = null;
return previous;
} public static void clear() {
prop = null;
map.clear();
} public static Prop getProp() {
if (prop == null)
throw new IllegalStateException("Load propties file by invoking PropKit.use(String fileName) method first.");
return prop;
} public static Prop getProp(String fileName) {
return map.get(fileName);
} public static String get(String key) {
return getProp().get(key);
} public static String get(String key, String defaultValue) {
return getProp().get(key, defaultValue);
} public static Integer getInt(String key) {
return getProp().getInt(key);
} public static Integer getInt(String key, Integer defaultValue) {
return getProp().getInt(key, defaultValue);
} public static Long getLong(String key) {
return getProp().getLong(key);
} public static Long getLong(String key, Long defaultValue) {
return getProp().getLong(key, defaultValue);
} public static Boolean getBoolean(String key) {
return getProp().getBoolean(key);
} public static Boolean getBoolean(String key, Boolean defaultValue) {
return getProp().getBoolean(key, defaultValue);
} public static boolean containsKey(String key) {
return getProp().containsKey(key);
}
}
Java封装 properties文件操作的更多相关文章
- java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)
java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...
- java 读取properties文件总结
一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...
- java基础学习总结——java读取properties文件总结
摘录自:http://www.cnblogs.com/xdp-gacl/p/3640211.html 一.java读取properties文件总结 在java项目中,操作properties文件是经常 ...
- properties文件操作
properties文件操作类 可以使用java.util.Properties读取.properties文件中的内容 import java.io.InputStream; import java. ...
- Java读properties文件中文乱码问题的解决方法
java读properties文件,包含中文字符的主要有两种: 1.key中包含中文字符的(value中也有可能包含) 2.key中不包含中文字符的(value中有可能包含) 1.key中包含中文字符 ...
- java读properties文件 乱码
java读properties文件,包含中文字符的主要有两种: 1.key中包含中文字符的(value中也有可能包含) 2.key中不包含中文字符的(value中有可能包含) 1.key中包含中文字符 ...
- java基础—java读取properties文件
一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...
- Java基础学习总结(15)——java读取properties文件总结
一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...
- java读取properties文件总结
一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...
随机推荐
- C++STL 之排列
固然我们可以自己使用递归编写全排列程序,但是既然STL里面已将有了这个功能为什么不直接用呢,下面就写一下直接使用C++ STL生成全排序的程序 函数名:next_permutation 包含头文件:a ...
- Effective C++学习笔记 条款07:为多态基类声明virtual析构函数
一.C++明确指出:当derived class对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果未定义——实际执行时通常发生的是对象的 ...
- Parallel WebDriver executions using TestNG
In this post, we will see how does one make use of TestNG to kick off parallel UI tests using WebDri ...
- 石子合并(四边形不等式优化dp) POJ1160
该来的总是要来的———————— 经典问题,石子合并. 对于 f[i][j]= min{f[i][k]+f[k+1][j]+w[i][j]} From 黑书 凸四边形不等式:w[a][c]+w[b][ ...
- Fatal NI connect error 12170
Fatal NI connect error 12170 转载:http://www.xifenfei.com/1812.html 今天在一台服务器的日志文件中,发现如下信息: Fatal NI co ...
- shell 的判断与比较
1 shell 的$! ,$?, $$,$@ $n $1 the first parameter,$2 the second... $# The number of co ...
- 【CSS】css各种居中方法
水平居中的text-align:center 和 margin:0 auto 这两种方法都是用来水平居中的,前者是针对父元素进行设置而后者则是对子元素.他们起作用的首要条件是子元素必须没有被flo ...
- android 应用页面与数据申请逻辑剥离;
1.页面与数据申请剥离,数据申请框架可以灵活更换,解耦合: 2.对应页面的数据申请类中,将返回数据解析剥离,灵活更换数据返回及对应解析: 二.模块划分: 1.一些通用的工具类,可以考虑迁移到com.c ...
- JS触发ASP.NET服务器端控件的方法
<asp:Button ID="Button_regId" runat="server" Font-Bold="False" OnCl ...
- DzzOffice管理员登陆方法和管理员应用介绍
DzzOffice的管理方式类似于windows的管理方式,是直接在桌面中,通过管理员应用进行系统中的所有管理里工作. 1.访问http://www.domain.com (你站点的访问地址) 2.点 ...