JAVA获取文件绝对路径的方法
发布时间:2020-12-14 19:47:29 所属栏目:Java 来源:网络整理
导读:本篇章节讲解JAVA获取文件绝对路径的方法。供大家参考研究。具体实现方法如下: 复制代码 代码如下: /** * 获取一个类的class文件所在的绝对路径。 这个类可以是JDK自身的类,也可以是用户自定义的类,或者是第三方开发包里的类。 * 只要是在本程序
本篇章节讲解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程序设计有所帮助。 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |