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路径。
java classpath getResource getResourceAsStream的更多相关文章
- java classpath批量设置shell脚本
java classpath批量设置shell脚本 注意:linux bash jar文件之间的分隔符是':' export JAR_HOME=path to directory which ...
- java classpath深入详解(转)
http://developer.51cto.com/art/200509/2786.htm 设置类路径 结构 可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPA ...
- JAVA classpath, 纠正我一直以来错误的认知
如何调在CLI中使用java tool(JDK中的java命令)调用一个打包在jar中的类,我想大多数人都能给出笼统的方案: java -classpath xxxxx com.test.classA ...
- java classpath import package 机制 @Java的ClassPath, Package和Jar
java classpath import package 机制 從一個簡單的例子談談package與import機制 基本原則:為什麼需要將Java文件和類文件切實安置到其所歸屬之Package ...
- JAVA classpath jar问题[zz]
classpath问题可以说是所有初学者头疼的问题,偶也一样. 1) classpath的作用: 它的作用就事让java找到你所要执行,或你拥有的类. 2) classpath的设置: 设置cla ...
- java -classpath or -cp 的设置和解释
classpath is a parameter—set either on the command-line, or through an environment variable—that tel ...
- JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致. 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.c ...
- 理解根目录,classpath, getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的区别
一: 理解根目录 <value>classpath*:/application.properties</value> <value>classpath:/appli ...
- 关于java classpath问题
在配置java环境的时候,有一个classpath,这是jre寻找.class文件的路径.一般会设置为当前路径".;%JAVA_HOME%\lib;",前面的.为当前路径 如果没有 ...
随机推荐
- python FileError
>>> ls1=["nihia"] >>> ls1 ['nihia'] >>> ls1.pop() 'nihia' >& ...
- Html 两个DIV并排的问题
在一个容器内部,要放在两个并排的DIV,两个方法: 1.使用浮动.这个方式div是脱离文档流的,在窗口布局复杂,大小变化的时候,可能会有一些不希望的情况发生. <!DOCTYPE HTML> ...
- jquery ajax 请求参数详细说明 及 实例
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- STL_lower_bound&upper_bound用法
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, la ...
- C#与Java多态方面的语法差异
C++.C#.Java,无奈三种语言让我多次混淆,多次搞清楚,不写个Demo我想还是会忘记的. 就好像是一个满水的杯子,倒掉一点,才能装下更多. 有时候博客就是一个倒水的地方,可以让我们清空自己,然后 ...
- 利用CAReplicatorLayer实现的加载动画
在上一篇中,笔者简要介绍了CAReplicatorLayer,在本篇中,将介绍具体的实用价值. 实用CAReplicatorLayer作为核心技术实现加载动画. 首先,创建一个UIView的子类 @i ...
- 多个DataSet数据合并
DataSet ds = myIAppSet.GetHomeHottestList(siteID, , time); ].Rows.Count > ) { ds.Merge(ds1); } Me ...
- Oracle监听的静态注册和动态注册
静态注册:通过解析listene.ora文件 动态注册:由PMON进程动态注册至监听中 在没有listener.ora配置文件的情况下,如果启动监听,则监听为动态注册.用图形化netca创建的监听,默 ...
- UWP x:bind
x:bind 作为win10 新特性,它好在哪?为什么要用它. 最近做UWP,对代码进行重构,对它有了一些了解. 先说优点: 1.性能高,内存小(相比传统的binding) 没图没真相,我先上2张图. ...
- 什么是shell
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...