……天天向上

好的想法总是无穷无尽

统计

留言簿(1)

阅读排行榜

评论排行榜

java 应用程序读取jar包外自定义配置文件及log4j日志配置文件

今天忙了一下午,终于把这个读取方法写到了,当然引用网络上的一个方法;其实同事也写了一个读取方法,但是感觉过于复杂。
总结一个:主要分几个步骤
1、因为是读取外部目录的配置文件,因此不适用该方式:
ResourceBundle rsb1 = ResourceBundle.getBundle("D:/WORK/XXXX/XXXXCount.properties");默认读取与该类同路径的配置文件;
private static String proFileFoLog4j=Logger.getLogger(XXXXAuth.class);默认读取jar包中的log4j日志配置文件;

2、解决方法1:
1)、重新加载Properties文件:
  Properties pro = new Properties();
  String path=getConf(proFileName);//获取当前类所在的路径,该方法请看下面。
        try {
         pro.load(new FileInputStream(path));
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
2)、编写一个获取当前类路径的方法,这里直接使用了网友已经写好的代码,直接运行,不用修改,省事!当然还有其它的获取路径的方法:
 // 其他方法的定义 //
 /**
  * *getAppPath需要一个当前程序使用的Java类的class属性参数,它可以 返回打包过的
  * *Java可执行文件(jar,war)所处的系统目录名或非打包Java程 序所处的目录
  *
  * @param cls为Class类型
  *@return 返回值为该类所在的 Java程序运行的目录
  */
 public static String getAppPath(Class cls) {
  ClassLoader loader = cls.getClassLoader();
  String clsName = cls.getName() + ".class";
  Package pack = cls.getPackage();
  String path = "";
  if (pack != null)
  {
   String packName = pack.getName();
   clsName = clsName.substring(packName.length() + 1);
   if (packName.indexOf(".") < 0)
    path = packName + "/";
   else {
    int start = 0, end = 0;
    end = packName.indexOf(".");
    while (end != -1) {
     path = path + packName.substring(start, end) + "/";
     start = end + 1;
     end = packName.indexOf(".", start);
    }
    path = path + packName.substring(start) + "/";
   }
  }
  java.net.URL url = loader.getResource(path + clsName);
  String realPath = url.getPath();
  int pos = realPath.indexOf("file:");
  if (pos > -1)
   realPath = realPath.substring(pos + 5);
  pos = realPath.indexOf(path + clsName);
  realPath = realPath.substring(0, pos - 5);
  if (realPath.endsWith("!"))
   realPath = realPath.substring(0, realPath.lastIndexOf("/"));
  return realPath;
 }// getAppPath定义 结束

3)获取完整的配置文件路径名称: String path=getConf.getAppPath(XXXXAuth.class)+proFileName;被第一步pro.load(new FileInputStream(path));调用即可获取配置文件。
4)通过getProperties(proFileFoRead).get("XXXXAUTH.ISENABLE").toString();获取配置文件信息即可。

2、解决方法2:
关于log4j引用外部文件夹的log4j.properties文件,有一种最简单的方法:直接在main函数中加入如下一句:
PropertyConfigurator.configure(getConf(proFileFoLog4j)); //设置log4j配置文件的路径
其中getConf()方法调用了上面的获取完整路径的方法,即可。




posted on 2012-05-17 19:10 japper 阅读(9047) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: