Java J2EE读取配置文件
- package com;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import javax.naming.InitialContext;
- import java.io.File;
- import java.io.FileFilter;
- import java.io.FileReader;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Properties;
- import java.util.concurrent.ConcurrentHashMap;
- /**
- * 读取配置文件
- */
- public class ReadProperty {
- private static final Logger logger = LoggerFactory.getLogger(Globals.class);
- private static String confHome = null;
- //并发,线程安全的map
- private static Map<String, String> confProperties = new ConcurrentHashMap<>();
- private static Map<String, File> confFiles = new ConcurrentHashMap<>();
- //加载成功
- private static boolean loadingSuccess = true;
- /**
- * 加载配置文件
- */
- private synchronized static void loadProperties() {
- //如果没有加载成功,返回
- if ( !loadingSuccess ) {
- return;
- }
- //如果加载的文件是空的
- if (confProperties.isEmpty()) {
- //如果电脑环境变量中为空
- if (confHome == null) {
- confHome = System.getProperty("CONF_HOME");
- }
- //如果web.xml中没配
- if (confHome == null) {
- try {
- InitialContext context = new InitialContext();
- confHome = (String)context.lookup("java:comp/env/CONF_HOME");
- } catch(Exception e) {
- logger.warn("Can not find jini name {}", "java:comp/env/CONF_HOME");
- }
- }
- //如果还是为空,就找本机路径下的ProtectionDomain/CodeSource/Location/getFile/WEB-INF/文件夹/conf
- if (confHome == null) {
- confHome = (new InitWebPath()).getRootPath() + "WEB-INF" + File.separator + "conf";
- }
- //是否是文件夹
- try {
- File dirFile = new File(confHome);
- if(!dirFile.exists() || (!dirFile.isDirectory())){
- logger.warn("Can not find home or is not directory!\n{}", confHome);
- loadingSuccess = false;
- return;
- }
- //获取所有文件后缀是.properties的文件名
- File[] files = dirFile.listFiles(new FileFilter() {
- @Override
- public boolean accept(File file) {
- String fileName = file.getName();
- int pos = fileName.lastIndexOf(".properties");//最后一个匹配的 db.xml和db.xml.xml
- if (pos != -1) {
- confFiles.put(fileName.substring(0, pos), file);//文件名与文件关联 key value
- return true;
- } else {
- pos = fileName.lastIndexOf(".xml");
- confFiles.put(fileName.substring(0, pos), file);
- return false;
- }
- }
- }
- );
- //迭代文件,读取key value
- for(File file : files) {
- Properties fileProperties = new Properties();
- fileProperties.load(new FileReader(file));
- Iterator<Entry<Object, Object>> iterProp = fileProperties.entrySet().iterator();
- while(iterProp.hasNext()) {
- Entry<Object, Object> row = iterProp.next();
- Object key = row.getKey();
- Object value = row.getValue();
- if (null!=key && null!=value) {
- confProperties.put(key.toString(), value.toString());
- }
- }
- }
- } catch(Exception e) {
- loadingSuccess = false;
- }
- }
- }
- /**
- * 读取配置文件信息
- * @param name key
- * @return value
- */
- public static String getProperty(String name) {
- if (confProperties.isEmpty()) {
- loadProperties();
- }
- return confProperties.get(name);
- }
- static class InitWebPath{
- public String getRootPath() {
- String url = InitWebPath.class.getProtectionDomain().getCodeSource().getLocation().getFile();
- String filePath = "";
- try {
- filePath = java.net.URLDecoder.decode(url, "utf-8");
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- final String fileFlag = "file:";
- if (filePath.startsWith(fileFlag)) {
- filePath = filePath.substring(fileFlag.length());
- }
- final String applicationFlag = "WEB-INF";
- return filePath.substring(0, filePath.lastIndexOf(applicationFlag));
- }
- }
- }
Java J2EE读取配置文件的更多相关文章
- java中读取配置文件ResourceBundle和Properties两种方式比较
今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...
- java web 读取配置文件两种方法
package com.tsinghua.getDataBaseConn; import java.io.IOException;import java.io.InputStream;import j ...
- java后台读取配置文件
前几天开发时遇到一个问题,在后台读取配置文件的时候无法读取属性值,于是上网查了查,现在在这分享给大家: 先附上代码吧: package com.shafei.util; import java.io. ...
- Java中读取配置文件中的内容,并将其赋值给静态变量的方法
应用场景 项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方 ...
- 在java中读取配置文件信息
public class PropertyUtil { public static final Properties PROP = new Properties(); /** * 读取配置文件的内容( ...
- java中读取配置文件的方法
转自:http://blog.csdn.net/stypace/article/details/38414871 一.使用org.apache.commons.configuration 需要使用的是 ...
- 转载:Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty("user.dir")的理解
唉,读取个文件,也就是在项目里面去获得配置文件的目录,然后,变成文件,有事没事,总是出个 FileNotFoundException 系统找不到指定的文件,气死人啦. 还有就是:System.get ...
- java中读取配置文件
若是Javaweb项目,项目运行于tomcat或其他容器时,可以使用下面方式来获取文件的输入流 1.当属性文件放在src下面时 InputStream is = Thread.currentThrea ...
- java中读取配置文件中的数据
1.先在项目中创建一个包(如:config),再创建一个配置文件(如:a.properties),添加配置信息如下:比如:name=kakaage=28 2.代码:import java.io.IOE ...
随机推荐
- mpvue图片轮播遇到的问题
小程序官方写法: <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" i ...
- Liferay7.0与cas单点登录配置
1.简介 Liferay7.0支持多种登录方式,包括:常规的.opensso.cas.ntlm.ldap.openid.Facebook.Google等. 其中, (1) 常规:则是默认Lif ...
- java Queue的用法
https://www.cnblogs.com/caozengling/p/5307992.html https://blog.csdn.net/a724888/article/details/802 ...
- Makefile中.PHONY的作用
单词phony (即phoney)的意思是:伪造的,假的.来自collins的解释是: If you describe something as phoney, you disapprove of i ...
- C++关于vector、queue、stack、priority_queue的元素访问
vector.queue.stack.priority_queue对元素进行元素访问时,返回的是对应元素的引用.
- (win10)Wamp环境下php升级至PHP7.2
(win10)Wamp环境下php升级至PHP7.2 ①下载php7.2到本地 链接:https://pan.baidu.com/s/16jqmF7GR_CRklHPAZ9VRrg 密码:4ob4 ② ...
- GCD之后台程序运行
点击Home键进入后台时进行计时,直到从新启动,超过三分钟启动手势 // // AppDelegate.m // GCDDown // // Created by City--Online on 15 ...
- [日常] Linux下的docker实践
1.Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC) 2.Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离 3.Docker 属 ...
- tomcat日志切割和定期删除(转载)
tomcat日志切割和定期删除 在tomcat的软件环境中,如果我们任由日志文件无限增长,总有一天会将磁盘占满的(废话).特别是在日志文件增长速度很快的一些情况下,按日志切割日志文件并删除,就是一件很 ...
- python基础技巧综合训练题2
1,判断一个字符串中的每一个字母是否都在另一个字符串中,可以利用集合的特性来解,集合的元素如果存在,再次更新(update) 是添加不进集合的,那么集合的长度还是跟原来一样,如果添加进去,集合长度就会 ...