JAVA获取文件绝对路径的方法

本文实例讲述了JAVA获取文件绝对路径的方法。分享给大家供大家参考。具体实现方法如下:

/**

* 获取一个类的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;

}

希望本文所述对大家的Java程序设计有所帮助。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。