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读取配置文件的信息的更多相关文章

  1. java读取配置文件的几种方法

    java读取配置文件的几种方法 原文地址:http://hbcui1984.iteye.com/blog/56496         在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配 ...

  2. Java读取配置文件的方式

    Java读取配置文件的方式-笔记 1       取当前启动文件夹下的配置文件   一般来讲启动java程序的时候.在启动的文件夹下会有配置文件 classLoader.getResource(&qu ...

  3. Java读取数据源相关信息

    一.采用读取数据源配置文件的方式 package com.ofsp.utils; import java.io.IOException; import java.io.InputStream; imp ...

  4. spring boot使用java读取配置文件,DateSource测试,BomCP测试,AnnotationConfigApplicationContext的DataSource注入

    一.配置注解读取配置文件         (1)@PropertySource可以指定读取的配置文件,通过@Value注解获取值   实例:           @PropertySource(val ...

  5. java读取配置文件(转)

    转载:http://blog.csdn.net/gaogaoshan/article/details/8605887 java 4种方式读取配置文件 + 修改配置文件     方式一:采用Servle ...

  6. 转:java读取配置文件的几种方法

    转自: http://www.iteye.com/topic/56496 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小 ...

  7. java读取配置文件

    java 读取文件可以用字节流和字符流. 由于一个汉字占两个字节,所以如果配置文件中有汉字,用字节流读取,会出现乱码. 用字符流则不会出现乱码. 配置文件 b.properties 文件如下: fam ...

  8. Java 读取配置文件数据

    Properties类 Properties类,是一个工具类,包含在java.util包中. 功能:可以保存持久的属性,通常用来读取配置文件或者属性文件,将文件中的数据读入properties对象中, ...

  9. java读取配置文件方法以及工具类

    第一种方式 : java工具类读取配置文件工具类 只是案例代码  抓取异常以后的代码自己处理 import java.io.FileNotFoundException; import java.io. ...

随机推荐

  1. OpenGL 获取当前屏幕坐标的三维坐标(gluUnProject使用例子 VS+glut)

    本例子参考于网络,并进行了一些修改,使用glut+vs2008来实现. 在鼠标点击处重新画一个旋转的红色立方体! 参考代码如下:  C++ Code  123456789101112131415161 ...

  2. IOC容器特性注入第七篇:请求上下文作用域

    Ninject的对象作用域: Transient .InTransientScope() 每次调用创建新实例. Singleton .InSingletonScope() 单例,仅创建一个实例. Th ...

  3. 【01月22日】A股滚动市盈率PE最低排名

    深康佳A(SZ000016) - 滚动市盈率PE:1.55 - 滚动市净率PB:1.03 - 滚动年化股息收益率:4.71% - - - 深康佳A(SZ000016)的历史市盈率走势图 华菱钢铁(SZ ...

  4. 关于Kafka Fetch Session的讨论

    Kafka在1.1.0版本引入了fetch session的概念,旨在降低“无效”FETCH请求对集群带宽资源的占用.故事的背景是这样的: 众所周知,Kafka的broker和consumer都会定期 ...

  5. AndroidのInputFillter之按字符过滤长度,一个中文当两个字符

    /** * 以Byte数的方式来实现的LengthFilter * @author bvin */ public class OneByteInputFilter implements InputFi ...

  6. css布局 - 垂直居中布局的一百种实现方式(更新中...)

    首先将垂直居中的现象和实现方式两大方向细分类如下: 接下来逐条累加不同情况下的垂直居中实现. 目录: 一.父元素高度固定时,单行文本 | 图片的垂直居中 1. line-height行高简单粗暴实现法 ...

  7. Centos 安装 nload

    第一种方法: wget http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm rpm -ivh epel-r ...

  8. [原]Jenkins(七)---jenkins项目编译测试发布由maven构建的web项目

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...

  9. (ecj)Eclipse的Java编译器分析之一——ecj介绍

    Java是一个开放的平台,对于除发布编译器/解释器/基础类库之外,该语言的负责机构更多的是制定一系列标准,任何符合标准的厂商产品均可用于市场投放.甚至包括其编译器及解释器. (比如Hibernate提 ...

  10. 架构师如何借鉴他人经验快速成长? | 2018GIAC上海站日程上线!

    随着网络技术的迅猛发展,越来越多的企业需要紧跟技术发展潮流以应对层出不穷的业务场景变化.如今多“语言”开发百花齐放,选择何种语言才能在合适的场景中发挥最大价值?互联网业务架构经过了长年的发展,已然朝着 ...