[转载]java中获取类加载路径和项目根路径的5种方式分析

 

本文转自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  }
 

猜你喜欢

转载自www.cnblogs.com/zhumaoyu/p/9179567.html