……天天向上

          好的想法總是無窮無盡

          統計

          留言簿(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 閱讀(9068) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 锦屏县| 林芝县| 伊金霍洛旗| 德兴市| 成武县| 万全县| 墨脱县| 股票| 灌南县| 诸城市| 澄江县| 鄯善县| 海淀区| 鄂托克前旗| 尚志市| 庆元县| 塔河县| 疏勒县| 台南县| 柳江县| 金溪县| 保德县| 临沧市| 桂阳县| 额尔古纳市| 曲阳县| 聂拉木县| 磐安县| 肃北| 大田县| 成都市| 诏安县| 南雄市| 湟源县| 南平市| 永康市| 潮州市| 临武县| 孝昌县| 衡山县| 乳山市|