posts - 495,comments - 227,trackbacks - 0
          /**
              * 獲取一個類的class文件所在的絕對路徑。 這個類可以是JDK自身的類,也可以是用戶自定義的類,或者是第三方開發包里的類。
              * 只要是在本程序中可以被加載的類,都可以定位到它的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。這個方法是本類最基礎的方法,供其它方法調用。
              */
             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
          如何調用呢  回復  更多評論
            
          # re: JAVA 中獲取文件的絕對路徑
          2012-10-18 22:31 | chloe
          測試成功了,傳遞Class對象就可以了,多謝~  回復  更多評論
            
          主站蜘蛛池模板: 寿阳县| 泾阳县| 郑州市| 泗洪县| 红安县| 犍为县| 乌兰察布市| 淄博市| 兴和县| 阆中市| 荆州市| 东源县| 宣武区| 曲松县| 曲周县| 丰镇市| 青田县| 探索| 龙陵县| 新田县| 响水县| 景东| 彭州市| 武邑县| 定南县| 衢州市| 盐津县| 富锦市| 民乐县| 定陶县| 巴林右旗| 理塘县| 玉田县| 绥滨县| 修武县| 封开县| 壶关县| 泉州市| 桃源县| 泸水县| 喜德县|