• [转载]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  }
     
  • 相关阅读:
    Zebra命令模式分析(一)  分析
    sublime text2
    开源路由软件zebra的命令存储原理及使用方法
    开源路由软件zebra介绍和和在Linux环境下的安装
    jQuery删除节点
    如何成为一名软件架构师
    jQuery中的DOM操作
    编写自己的Shell解释器
    Notepad++集成VC2010环境
    ffmpeg使用语法
  • 原文地址:https://www.cnblogs.com/zhumaoyu/p/9179567.html
Copyright © 2020-2023  润新知