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 ...
随机推荐
- MySql 高可用架构Atlas
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug ...
- 走进javascript——它是什么?
javascript不是什么 如<把时间当作朋友>的作者所说,"有些时候,有些事物,从反面描述比从正面描述更为容易.如若先仔细说清楚这本书不是什么,之后,至于它究竟是什么,很可能 ...
- python get请求
#!/usr/bin/python #-*- coding:UTF-8 -*-#coding=utf-8 import requests import time import hashlib impo ...
- 【转】Java中堆和栈的区别
Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收 ...
- Charles在Mac中抓包使用说明
在工作期间,经过同事介绍,发现一款很强大的抓包工具Charles,现在记录下来分享给大家.常用的有以下几款功能: 1.支持配置抓取定向地址的网络请求 打开charles,打开Proxy->Rec ...
- c# winform 获取当前程序运行根目录
1 // 获取程序的基目录. 2 System.AppDomain.CurrentDomain.BaseDirectory 3 4 5 // 获取模块的完整路径. 6 System.Diagnosti ...
- MVC应用jQuery动态产生数据
在前一篇<MVC应用程序JsonResult()的练习>http://www.cnblogs.com/insus/p/3402042.html中.Insus.NET在练习中学会了在视图中, ...
- Java虚拟机--线程安全和锁优化
Java虚拟机--线程安全和锁优化 线程安全 线程安全:当多线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象 ...
- Android - AMS源码分析
Android核心分析之AMS App和AMS(SystemServer进程)还有zygote进程分属于三个独立的进程 App与AMS通过Binder进行IPC通信,AMS(SystemServer进 ...
- 如何高效的使用-Notepad++
Notepad++功能比 Windows 中的 Notepad(记事本)强大,除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码.Notepad++ 不仅有语法高亮度显示,也有语法折叠 ...