zoukankan      html  css  js  c++  java
  • 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路径。

     

  • 相关阅读:
    POJ 3672 水题......
    POJ 3279 枚举?
    STL
    241. Different Ways to Add Parentheses
    282. Expression Add Operators
    169. Majority Element
    Weekly Contest 121
    927. Three Equal Parts
    910. Smallest Range II
    921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/mahuan2/p/5909040.html
Copyright © 2011-2022 走看看