java读取配置文件的信息
1. 首先,工程结构如下:
注:
a. 蓝色标注的两个文件是和com包平级的,都在src下。EnnNotificationPushProxy.ini是这个工程的配置文件,log4j.properties是log4j的配置文件。
b. 红色标注的两个文件,ConfigUtil.java是用来读取EnnNotificationPushProxy.ini的,LogUtil.java是读取log4j.properties的。
2. ConfigUtil.java内容:
package com.ecity.enn.notification.proxy.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;
public class ConfigUtil {
private static final String INI_FILE_NAME = "/EnnNotificationPushProxy.ini";
private static HashMap<String, String> propertyMap = null;
static {
propertyMap = new HashMap<String, String>();
String path = URLUtil.getClassPath(ConfigUtil.class) + INI_FILE_NAME;
LogUtil.debug("EnnNotificationPushProxy.ini path=" + path);
File file = new File(path);
FileInputStream inStream = null;
try {
inStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
LogUtil.error(e);
}
Properties properties = new Properties();
try {
properties.load(inStream);
} catch (IOException e) {
LogUtil.error(e);
}
@SuppressWarnings("unchecked")
Enumeration<String> keys = (Enumeration<String>) properties.propertyNames();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
propertyMap.put(key.toLowerCase(), properties.getProperty(key));
}
}
public static String get(String key) {
return propertyMap.get(key.toLowerCase());
}
public static int getInt(String key) {
String valueStr = propertyMap.get(key.toLowerCase());
int value = 0;
try {
value = Integer.valueOf(valueStr);
} catch (Exception e) {
LogUtil.error(e);
value = 0;
}
return value;
}
public static long getLong(String key) {
String valueStr = propertyMap.get(key.toLowerCase());
long value = 0;
try {
value = Long.valueOf(valueStr);
} catch (Exception e) {
LogUtil.error(e);
value = 0;
}
return value;
}
public static void set(String key, String value) {
if (get(key) == null) {
propertyMap.put(key, value);
}
}
}
3. LogUtil.java内容:
package com.ecity.enn.notification.proxy.util;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogUtil {
private static final Logger logger;
private static final String INI_FILE_NAME = "/log4j.properties";
private static final String TAG = "EnnNotificationPushProxy";
static {
System.out.println("ProjectHomePath=" + URLUtil.getProjectHomePath());
System.setProperty("WORKDIR", URLUtil.getProjectHomePath());
String path = URLUtil.getClassPath(LogUtil.class) + INI_FILE_NAME;
PropertyConfigurator.configure(path);
logger = Logger.getLogger(TAG);
}
public static void debug(Object message) {
logger.info(message);
}
public static void debug(String message, Throwable e) {
logger.info(message, e);
}
public static void info(String message) {
logger.info(message);
}
public static void info(String message, Throwable e) {
logger.info(message, e);
}
public static void error(String message) {
logger.error(message);
}
public static void error(Object message, Throwable e) {
logger.error(message, e);
}
public static void error(Throwable e) {
logger.error("", e);
}
}
注:注意WORKDIR的值的设置。它的值是当前工程的位置。
4. log4j.properties内容:
log4j.rootLogger=ALL, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=${WORKDIR}/logs/EnnNotificationPushProxy.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
注:注意WORKDIR变量的使用。这个配置下,logs文件生成在工程的根目录。
5. 在ConfigUtil.java和LogUtil.java中,都使用到了URLUtil类。如下:
package com.ecity.enn.notification.proxy.util;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URL;
/**
* <p>
* Title:URL辅助工具类
* </p>
*/
public class URLUtil {
/**
*
* Description:取得当前类所在的文件
*/
public static File getClassFile(Class<?> clazz) {
URL path = clazz.getResource(clazz.getName().substring(clazz.getName().lastIndexOf(".") + 1) + ".class");
if (path == null) {
String name = clazz.getName().replaceAll("[.]", "/");
path = clazz.getResource("/" + name + ".class");
}
return new File(path.getFile());
}
/**
* Description:同getClassFile 解决中文编码问题
*/
public static String getClassFilePath(Class<?> clazz) {
try {
return java.net.URLDecoder.decode(getClassFile(clazz).getAbsolutePath(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "";
}
}
/**
*
* Description:取得当前类所在的ClassPath目录
*
* @param clazz
* @return
* @mail sunyujia@yahoo.cn
* @since:Sep 21, 2008 12:32:27 PM
*/
public static File getClassPathFile(Class<?> clazz) {
File file = getClassFile(clazz);
for (int i = 0, count = clazz.getName().split("[.]").length; i < count; i++)
file = file.getParentFile();
if (file.getName().toUpperCase().endsWith(".JAR!")) {
file = file.getParentFile();
}
return file;
}
/**
*
* Description: 同getClassPathFile 解决中文编码问题
*
* @param clazz
* @return
* @mail sunyujia@yahoo.cn
* @since:Sep 21, 2008 1:10:37 PM
*/
public static String getClassPath(Class<?> clazz) {
try {
return java.net.URLDecoder.decode(getClassPathFile(clazz).getAbsolutePath(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "";
}
}
public static String getProjectHomePath() {
String path = getClassPath(URLUtil.class);
String webAppPath = path.substring(0, path.toUpperCase().lastIndexOf("WEB-INF")).replaceAll("%20", " ");
return webAppPath;
}
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println(getClassFilePath(URLUtil.class));
System.out.println(getClassPath(URLUtil.class));
}
}
6. 最终部署结果:
a. 两个配置文件的位置在classes下。如下:
b. logs文件夹在项目根目录下。log文件在logs文件夹下。如下:
java读取配置文件的信息的更多相关文章
- java读取配置文件的几种方法
java读取配置文件的几种方法 原文地址:http://hbcui1984.iteye.com/blog/56496 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配 ...
- Java读取配置文件的方式
Java读取配置文件的方式-笔记 1 取当前启动文件夹下的配置文件 一般来讲启动java程序的时候.在启动的文件夹下会有配置文件 classLoader.getResource(&qu ...
- Java读取数据源相关信息
一.采用读取数据源配置文件的方式 package com.ofsp.utils; import java.io.IOException; import java.io.InputStream; imp ...
- spring boot使用java读取配置文件,DateSource测试,BomCP测试,AnnotationConfigApplicationContext的DataSource注入
一.配置注解读取配置文件 (1)@PropertySource可以指定读取的配置文件,通过@Value注解获取值 实例: @PropertySource(val ...
- java读取配置文件(转)
转载:http://blog.csdn.net/gaogaoshan/article/details/8605887 java 4种方式读取配置文件 + 修改配置文件 方式一:采用Servle ...
- 转:java读取配置文件的几种方法
转自: http://www.iteye.com/topic/56496 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小 ...
- java读取配置文件
java 读取文件可以用字节流和字符流. 由于一个汉字占两个字节,所以如果配置文件中有汉字,用字节流读取,会出现乱码. 用字符流则不会出现乱码. 配置文件 b.properties 文件如下: fam ...
- Java 读取配置文件数据
Properties类 Properties类,是一个工具类,包含在java.util包中. 功能:可以保存持久的属性,通常用来读取配置文件或者属性文件,将文件中的数据读入properties对象中, ...
- java读取配置文件方法以及工具类
第一种方式 : java工具类读取配置文件工具类 只是案例代码 抓取异常以后的代码自己处理 import java.io.FileNotFoundException; import java.io. ...
随机推荐
- Java知多少(74)基础类库
Java 的类库是 Java 语言提供的已经实现的标准类的集合,是 Java 编程的 API(Application Program Interface),它可以帮助开发者方便.快捷地开发 Java ...
- qualcomm wifi kernel beacon loss 日志记录
记录一下高通对于beacon loss的处理的日志.方便后面再来分析. 04:17:13.397139 [04:17:13.383909] [000000A81699E7EC] [VosMC] wla ...
- 第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置
第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置 设置后台某个字段的排序规则 在当前APP里的adminx.py文件里的数据表管理器里设置 order ...
- Core Animation 动画的使用:关键帧动画、基础动画、动画组
首先让我们了解下什么是 Core Animation,Core Animation 为核心动画,他为图形渲染和动画提供了基础.使用核心动画,我们只需要设置起点.终点.关键帧等一些参数,剩下的工作核心动 ...
- Spring task定时任务执行一段时间后莫名其妙停止的问题
前因: 我写了一个小项目,主要功能是用Spring task定时任务每天定时给用户发送邮件.执行了几个月一直没有问题,前几天,莫名其妙的突然不再发送邮件了. 只好花费一些时间来查看到底是什么原因造成的 ...
- 【应用安全】S-SDLC安全开发生命周期
0x01 S-SDLC简介 OWASP Secure Software Development Lifecycle Project(S-SDLC)是OWASP组织首个由OWASP中国团队独立发布并主导 ...
- 深入web开发之webserver/servlet容器
可能按照书上的demo,自己就能做个小型网站,但是在并发下是什么情况呢?生成了多少对象?对象的关系又是什么?这些问题都要慢慢弄清楚. ------作为后端工程师,不仅要会增删改查,还要了解servle ...
- 更新docker时间-需要重启docker
更新docker时间:1.docker run -d -v /etc/localtime:/etc/localtime:ro [IMAGE] 2.重启,docker-compose up -d 3.d ...
- ssh 管理 linux登录远程服务器
使用 ssh 免秘登录方式 客户端:1. 生成公钥和私钥 ssh-keygen 一般不需要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个. 运行结束以后,在$HOME/. ...
- python 中的流程控制语句
原文 if 语句 >>> x = int(input("Please enter an integer: ")) Please enter an integer: ...