本文转自https://blog.csdn.net/hhzxj2008/article/details/5108231
主要想写一个获取指定包下的所有类方法.然后发现了以下三篇写得很好的博客
Java遍历包中所有类 http://blog.csdn.net/wangpeng047/article/details/8124390
Java遍历jar包所有类-后续 http://blog.csdn.net/wangpeng047/article/details/8202353
Java遍历包中所有类-终续 http://blog.csdn.net/wangpeng047/article/details/8206427
以下两行是,其中获取所有urls并传入getClassNameByJars方法的代码
ClassLoader loader = Thread.currentThread().getContextClassLoader();
fileNames = getClassNameByJars(((URLClassLoader) loader).getURLs(), packagePath, childPackage);
对(URLClassLoader) loader 的写法, 父类强转成子类子类不报错也很奇怪.
URLClassLoader类的源码看得也不是很懂.
于是找到了以下方法五的写法.作用与((URLClassLoader) loader).getURLs()基本一致;
System.getProperty("java.class.path").split(":");
1 package my; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.net.URL; 6 7 public class MyUrlDemo { 8 9 10 public static void main(String[] args) { 11 MyUrlDemo muDemo = new MyUrlDemo(); 12 try { 13 muDemo.showURL(); 14 } catch (IOException e) { 15 // TODO Auto-generated catch block 16 e.printStackTrace(); 17 } 18 } 19 20 public void showURL() throws IOException { 21 22 // 第一种:获取类加载的根路径 D:\git\daotie\daotie\target\classes 23 File f = new File(this.getClass().getResource("/").getPath()); 24 System.out.println(f); 25 26 // 获取当前类的所在工程路径; 如果不加“/” 获取当前类的加载目录 D:\git\daotie\daotie\target\classes\my 27 File f2 = new File(this.getClass().getResource("").getPath()); 28 System.out.println(f2); 29 30 // 第二种:获取项目路径 D:\git\daotie\daotie 31 File directory = new File("");// 参数为空 32 String courseFile = directory.getCanonicalPath(); 33 System.out.println(courseFile); 34 35 36 // 第三种: file:/D:/git/daotie/daotie/target/classes/ 37 URL xmlpath = this.getClass().getClassLoader().getResource(""); 38 System.out.println(xmlpath); 39 40 41 // 第四种: D:\git\daotie\daotie 42 System.out.println(System.getProperty("user.dir")); 43 /* 44 * 结果: C:\Documents and Settings\Administrator\workspace\projectName 45 * 获取当前工程路径 46 */ 47 48 // 第五种: 获取所有的类路径 包括jar包的路径 49 System.out.println(System.getProperty("java.class.path")); 50 51 } 52 }