• java classpath getResource getResourceAsStream


    1、classpath

    用于指定java运行时,jvm寻找class文件以及jar文件的存储目录。jvm依据classpath中出现的jar文件以及目录,依次寻找,直到找到指定class文件。

    例:java -classpath .;./lib/*;./ext/* MainClass

    当MainClass不在当前目录"."时,会去./lib目录下的所有jar文件中去寻找,如果未找到,则继续去./ext目录下的所有jar文件中去找,直到找到。否则抛出ClassNotFound的exception。

    注意:找到指定class文件后,jvm便会停止寻找。如果后续的jar文件中存在同名的class文件,那么classpath中路径的变化,会造成程序运行结果的变化

    注意:classpath的第一个路径非常重要,它是此java程序运行的根路径,缺失根路径,会导致java运行时的路径"/"获取失败,如果的确需要获取"/"路径,则会获得null。

    注意:classpath中的目录中,如果存放jar文件,是不会被读取的,只读取以目录结构存放的class文件。

    2、getResource

    在java程序运行时,可通过以下方式获得运行时目录:

    XXX.class.getResource("/").getPath();//获取java运行的根路径,classpath中出现的第一个目录

    XXX.class.getResource("").getPath();//获取XXX类所在的路径,不包括XXX的名称

    XXX.class.getClassLoader().getResource("").getPath();//获取根路径,因为ClassLoader处于根路径

    System.getProperty("user.dir");//获取java程序运行的目录,可能同java根路径不同

     

    例1:cd /;java -classpath /home/test:/home/test/lib/* MainClass;

    如果MainClass在路径/home/test下,上述五个路径获取方法,结果为

    /home/test;/home/test;/home/test;/

    如果MainClass在路径/home/test/lib中的一个jar文件中,上述五个路径获取方法,结果为

    /home/test;file:/home/test/lib/***.jar!;/home/test;/

    例2:cd /;java -classpath /:/home/test/lib/* MainClass;

    如果MainClass在"/"路径/下,上述五个路径获取方法,结果为

    /;/;/;/

    如果MainClass在路径/home/test/lib中的一个jar文件中,上述五个路径获取方法,结果为

    /;file:/home/test/lib/***.jar!;/;/

    注意:

    1)getResource("/")永远返回的是classpath中出现的第一个目录地址。如果classpath中不包含目录,则返回的为null。

    2)getClassLoader().getResource("")返回值也是classpath中出现的第一个目录地址。

    3)getClassLoader().getResource("/")不会获取到根路径,返回的为null,一定注意。

    4)System.getProperty("user.dir")为执行java命令时所在的路径。

    5)在一些情况下,不能通过getResource("")反推出getResource("/")。

    3、读取classpath下的文件

    使用Class.getResourceAsStream方法。

    如果需要读取根路径下的文件,使用Class.getResourceAsStream("/***.xml")即可,jvm依据classpath中出现的jar文件以及目录,依次寻找,直到找到。

    如果只需要读取相对路径下的文件,使用Class.getResourceAsStream("***.xml")即可,文件名开头没有"/",jvm会在指定的class文件的目录下开始寻找指定的文件。

    注意:getClassLoader().getResourceAsStream(fileName),fileName不能以"/"开头(为什么如此,待研究)

    注意:getResourceAsStream可以穿透jar文件,读取到jar包里面的文件内容。 

    注意:new File("test.txt"),使用的是相对路径,相对于user.dir的路径,不是相对于classpath路径。

     

  • 相关阅读:
    覆盖式发布与非覆盖式发布
    GIT
    Web Service返回符合Xml Schema规范的Xml文档
    下拉渐显菜单
    计算网页上坐标的距离
    初识交互设计
    良好用户体验-实现过程!
    做 用户调研?
    这个没什么技术含量,实现起来很简单?
    SQL SERVER 登录问题!该用户与可信的Sql Server连接无关联
  • 原文地址:https://www.cnblogs.com/mahuan2/p/5909040.html
Copyright © 2020-2023  润新知