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對象就可以了,多謝~  回復  更多評論
            
          主站蜘蛛池模板: 无锡市| 池州市| 南溪县| 顺义区| 西畴县| 沈阳市| 紫金县| 冷水江市| 大余县| 巴塘县| 台中县| 铜鼓县| 时尚| 原阳县| 常熟市| 遂川县| 临桂县| 慈利县| 克拉玛依市| 龙口市| 连云港市| 承德县| 宁夏| 澜沧| 绿春县| 宁海县| 台东县| 来宾市| 会同县| 关岭| 通江县| 牡丹江市| 绥阳县| 邹平县| 沙雅县| 进贤县| 柳江县| 兴海县| 山阴县| 朝阳县| 柳河县|