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的更多相关文章

  1. java classpath批量设置shell脚本

    java classpath批量设置shell脚本   注意:linux bash jar文件之间的分隔符是':'    export JAR_HOME=path to directory which ...

  2. java classpath深入详解(转)

    http://developer.51cto.com/art/200509/2786.htm 设置类路径 结构 可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPA ...

  3. JAVA classpath, 纠正我一直以来错误的认知

    如何调在CLI中使用java tool(JDK中的java命令)调用一个打包在jar中的类,我想大多数人都能给出笼统的方案: java -classpath xxxxx com.test.classA ...

  4. java classpath import package 机制 @Java的ClassPath, Package和Jar

    java classpath import package 机制   從一個簡單的例子談談package與import機制 基本原則:為什麼需要將Java文件和類文件切實安置到其所歸屬之Package ...

  5. JAVA classpath jar问题[zz]

    classpath问题可以说是所有初学者头疼的问题,偶也一样. 1) classpath的作用:  它的作用就事让java找到你所要执行,或你拥有的类. 2) classpath的设置:  设置cla ...

  6. java -classpath or -cp 的设置和解释

    classpath is a parameter—set either on the command-line, or through an environment variable—that tel ...

  7. JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别

       Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致. 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.c ...

  8. 理解根目录,classpath, getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的区别

    一: 理解根目录 <value>classpath*:/application.properties</value> <value>classpath:/appli ...

  9. 关于java classpath问题

    在配置java环境的时候,有一个classpath,这是jre寻找.class文件的路径.一般会设置为当前路径".;%JAVA_HOME%\lib;",前面的.为当前路径 如果没有 ...

随机推荐

  1. BZOJ 1060: [ZJOI2007]时态同步

    Description 一个有根树,你只能进行增加操作,问你将所有叶节点到根的路径权值相同至少需要增加几次. Sol 我也不知道该叫什么算法... 反正就是记录一下到子节点到当前节点的最大距离统计答案 ...

  2. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  3. Java 类初始化顺序

    总的来说: 父类静态代码块->子类静态代码块->子类main()方法->父类构造块->父类构造方法->子类构造块->子类构造方法 注意,就算是静态的方法也需要调用才 ...

  4. MVC4.0

    --后台ajax传值 <script type="text/javascript">     $(document).ready(function dianZan(id ...

  5. unlink和close关系

    今天看到nginx用文件锁实现互斥的实现方案时,发现,unlink文件后还可需用fd,很是纳闷!于是搜索到此文,并自测了下,涨姿势了~分享给大家~ 原理: 每一个文件,都可以通过一个struct st ...

  6. C#调用webservice简单实例

    如何利用IIS创建webservice不多做阐述,直接讲C#代码中如何调用已创建好的webservice. 首先在VS2010中新建一个工程项目,然后右键点击工程名选择添加服务引用. 在URL一栏中输 ...

  7. ASP.NET知识总结(3.HTTP协议详解)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  8. 算法系列:FFT 001

    转载自http://blog.csdn.net/orbit/article/details/17210461 2012年9月的时候,一个南京的大学生从电视台播放的一段记者采访360总裁周鸿祎的视频中破 ...

  9. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(一):下载平台并基于直连环境运行

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  10. WCF创建RESTService

    这篇博客将介绍在WCF中创建REST服务相关内容.首先先看一下的项目结构: Contract,Service两个工程为类库工程,需要添加System.ServiceModel, System.Serv ...