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 閱讀(2207) 評論(2)  編輯  收藏 所屬分類: JAVA

          FeedBack:
          # re: JAVA 中獲取文件的絕對路徑
          2012-10-18 22:22 | chloe
          如何調用呢  回復  更多評論
            
          # re: JAVA 中獲取文件的絕對路徑
          2012-10-18 22:31 | chloe
          測試成功了,傳遞Class對象就可以了,多謝~  回復  更多評論
            
          主站蜘蛛池模板: 左权县| 青河县| 吉隆县| 肇州县| 文水县| 五台县| 安阳县| 岢岚县| 上杭县| 都匀市| 观塘区| 麻城市| 孝昌县| 神农架林区| 渝北区| 惠东县| 九龙县| 龙南县| 三明市| 荣成市| 钦州市| 松阳县| 茂名市| 大足县| 安平县| 舟曲县| 惠水县| 大连市| 全州县| 平陆县| 天峨县| 岳普湖县| 舞阳县| 河曲县| 连江县| 佛山市| 元朗区| 金平| 蒙城县| 连州市| 津市市|