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 ...
随机推荐
- 大叔来说说Markdown的使用
强调和高亮背景 中国是伟大的民族! Highlight 中国是`伟大`的民族! ==Highlight== 链接 大叔博客园 [大叔博客园](http://www.cnblogs.com/lori & ...
- spring boot实现ssm(1)功能
前面完成了ssm的整合, 整个过程可以说很繁杂, 各种配置, 很容易让人晕掉. 这里使用spring boot 的方式来实现ssm(1)中的功能. 一. 建项目 1. 使用 idea 来创建 spri ...
- 非Spring环境下使用Mybatis操作数据库的流程
准备工作 1, 导入mybatis-3.2.7.jar,mysql-connector-5.1.25-bin.jar两个jar包 2, 在数据库中创建一个db_test数据库,库中有一个表为use ...
- SpringBoot入门 (九) MQ使用
本文记录学习在Spring Boot中使用MQ. 一 什么是MQ MQ全称(Message Queue)又名消息队列,是一种异步通讯的中间件.它的作用类似于邮局,发信人(生产者)只需要将信(消息)交给 ...
- Linux 普通用户启动nginx
众所周知,apache的80端口为系统保留端口,如果通过其他非root用户启动,会报错如下: ()Permission denied: make_sock: could not bind to add ...
- layer插件学习——icon样式
本文是自己整理的关于layer插件的icon样式结果 一.准备工作 下载jQuery插件和layer插件,并引入插件(注意:jQuery插件必须在layer插件之前引用) 百度云资源链接: jQuer ...
- U3D Invoke系列函数
public void Invoke(string methodName, float time) 多少秒后执行某个函数 参数说明: methodName:要执行的函数的名称 time:秒数,time ...
- ICAO 附件十四面课件分享
附件十四面课件分享 2017-05-22 刘崇军 风螺旋线 诚意满满的附件十四面课件,全文需耗流量大约5M.图例中采用的是I类精密跑道基准代码3.4的限制面参数,用SketchUp绘制而成. 感谢您阅 ...
- zoj 1760 Doubles(set集合容器的应用)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1760 题目描述: As part of an arithmet ...
- Linq 处理 List数据
概述:LINQ又称为语言集成查询,是一种类似于SQL的一种查询语言.语言集成查询让开发人员可以使用.NET程序语言(如C#)去查询数据源,主要数据源为内存中的集合对象.ADO.NET数据集.数据库以及 ...