posts - 495,comments - 227,trackbacks - 0
          /**
              * 獲取一個類的class文件所在的絕對路徑。 這個類可以是JDK自身的類,也可以是用戶自定義的類,或者是第三方開發(fā)包里的類。
              * 只要是在本程序中可以被加載的類,都可以定位到它的class文件的絕對路徑。
              *
              * @param cls
              *            一個對象的Class屬性
              * @return 這個類的class文件位置的絕對路徑。 如果沒有這個類的定義,則返回null。
              */
             private String getPathFromClass(Class cls) throws IOException {
               String path = null;
               if (cls == null) {
                 throw new NullPointerException();
               }
               URL url = getClassLocationURL(cls);
               if (url != null) {
                 path = url.getPath();
                 if ("jar".equalsIgnoreCase(url.getProtocol())) {
                   try {
                     path = new URL(path).getPath();
                   }
                   catch (MalformedURLException e) {
                   }
                   int location = path.indexOf("!/");
                   if (location != -1) {
                     path = path.substring(0, location);
                   }
                 }

                 File file = new File(path.replaceAll("%20"," "));
                 path = file.getCanonicalPath();
               }
               return path;
             }

             /**
              * 獲取類的class文件位置的URL。這個方法是本類最基礎的方法,供其它方法調(diào)用。
              */
             private URL getClassLocationURL(final Class cls) {
               if (cls == null) {
                 throw new IllegalArgumentException("class that input is null");
               }
               URL result = null;
               final String clsAsResource = cls.getName().replace('.', '/').concat(".class");
               final ProtectionDomain pd = cls.getProtectionDomain();
               if (pd != null) {
                 final CodeSource cs = pd.getCodeSource();
                 if (cs != null) {
                   result = cs.getLocation();

                 }
                 if (result != null) {
                   if ("file".equals(result.getProtocol())) {
                     try {
                       if (result.toExternalForm().endsWith(".jar")|| result.toExternalForm().endsWith(".zip")) {
                         result = new URL("jar:".concat(result.toExternalForm()).concat("!/").concat(clsAsResource));
                       }
                       else if (new File(result.getFile()).isDirectory()) {
                         result = new URL(result, clsAsResource);
                       }
                     }
                     catch (MalformedURLException ignore) {
                     }
                   }
                 }
               }

               if (result == null) {
                 final ClassLoader clsLoader = cls.getClassLoader();
                 result = clsLoader != null ? clsLoader.getResource(clsAsResource): ClassLoader.getSystemResource(clsAsResource);
               }
               return result;
             }

          posted on 2011-05-27 13:05 SIMONE 閱讀(2197) 評論(2)  編輯  收藏 所屬分類: JAVA

          FeedBack:
          # re: JAVA 中獲取文件的絕對路徑
          2012-10-18 22:22 | chloe
          如何調(diào)用呢  回復  更多評論
            
          # re: JAVA 中獲取文件的絕對路徑
          2012-10-18 22:31 | chloe
          測試成功了,傳遞Class對象就可以了,多謝~  回復  更多評論
            
          主站蜘蛛池模板: 句容市| 淳安县| 朝阳区| 汝城县| 靖宇县| 咸丰县| 津南区| 枣庄市| 慈利县| 县级市| 宁远县| 乌恰县| 永城市| 通山县| 雷州市| 亚东县| 老河口市| 通渭县| 衡阳市| 长治市| 巫山县| 开原市| 曲松县| 大余县| 玉门市| 新安县| 晋州市| 凤台县| 荔浦县| 东城区| 沾化县| 酒泉市| 杨浦区| 夹江县| 崇文区| 河北区| 清水河县| 北票市| 颍上县| 长岭县| 隆尧县|