classpath获取--getResource()
在java中的API里,有两种方式来使用classpath读取资源。
1. Class的getResource()
2. ClassLoader的getResource()
但是两者有一定区别,运行以下程序:
package zero.xml.config;
public class Main {
public static void main(String[] args) {
new Main().testGetResource();
}
public void testGetResource() {
System.out.println(Main.class.getResource("/").getPath());
System.out.println(Main.class.getResource("/app.properties").getPath());
System.out.println(Main.class.getResource("").getPath());
System.out.println(Main.class.getResource("app.properties").getPath());
System.out.println("-------------------");
System.out.println(this.getClass().getResource("/").getPath());
System.out.println(this.getClass().getResource("/app.properties").getPath());
System.out.println(this.getClass().getResource("").getPath());
System.out.println(this.getClass().getResource("app.properties").getPath());
System.out.println("-------------------");
System.out.println(Main.class.getClassLoader().getResource("").getPath());
System.out.println(Main.class.getClassLoader().getResource("app.properties").getPath());
System.out.println(Main.class.getClassLoader().getResource("zero/xml/config").getPath());
System.out.println(Main.class.getClassLoader().getResource("zero/xml/config/app.properties").getPath());
}
}
得到输出为:
/home/rain/git/spring-self-learn/bin/
/home/rain/git/spring-self-learn/bin/app.properties
/home/rain/git/spring-self-learn/bin/zero/xml/config/
/home/rain/git/spring-self-learn/bin/zero/xml/config/app.properties
-------------------
/home/rain/git/spring-self-learn/bin/
/home/rain/git/spring-self-learn/bin/app.properties
/home/rain/git/spring-self-learn/bin/zero/xml/config/
/home/rain/git/spring-self-learn/bin/zero/xml/config/app.properties
-------------------
/home/rain/git/spring-self-learn/bin/
/home/rain/git/spring-self-learn/bin/app.properties
/home/rain/git/spring-self-learn/bin/zero/xml/config
/home/rain/git/spring-self-learn/bin/zero/xml/config/app.properties
也就是:
1. 如果想获得classpath,使用以下方法:
System.out.println(Main.class.getResource("/").getPath());
System.out.println(Main.class.getClassLoader().getResource("").getPath());
2. 如果想获得classpath下的文件,使用以下方法:
System.out.println(Main.class.getResource("/app.properties").getPath());
System.out.println(Main.class.getClassLoader().getResource("app.properties").getPath());
3. 如果想获得当前类(比如zero.xml.config.Main)的路径,使用以下方法:
System.out.println(Main.class.getResource("").getPath());
System.out.println(Main.class.getClassLoader().getResource("zero/xml/config").getPath());
4. 如果想获得当前类路径下的文件,使用以下方法:
System.out.println(Main.class.getResource("app.properties").getPath());
System.out.println(Main.class.getClassLoader().getResource("zero/xml/config/app.properties").getPath());
注意,如果获取的文件或路径不存在,getResource()会返回null。比如,getClassLoader().getResource("/")就会返回null。
classpath获取--getResource()的更多相关文章
- classpath: VS classpath*:
同名资源存在时,classpath: 只从第一个符合条件的classpath中加载资源,而classpath*: 会从所有的classpath中加载符合条件的资源 classpath*:需要遍历所有的 ...
- classpath和filepath
******************************** java中的相对路径和绝对路径 ******************************** 相对路径(其实就是编译后的路径) - ...
- classpath: 和classpath*:的区别
classpath本质是jvm的根路径,jvm获取资源都是从该根路径下找的,注意这个根路径是个逻辑路径,并不是磁盘路径.比如两个jar包的路径是/a/a.jar和/b/b.jar,但是用classpa ...
- 通过SVN获取变更列表,得到对应的最新class
通过本地SVN获得未提交的文件列表获取工程中最新的class的方式参考: 增量部署代码利用批处理命令按原始结构复制指定的文件 新写了一个增强版,根据已提交至SVN的代码loglist,获取最新的cla ...
- [Java拾遗三]JavaWeb基础之Servlet
Servlet 1,servlet介绍 servlet是一项动态web资源开发技术. 运行在服务器端. 作用:处理业务逻辑,生成动态的内容,返回给浏览器 ...
- 上次遗留下来的XMLUtil的问题
·在上周留下了一个关于XMLUtil的问题,问题大概是这样的,需要通过读取一个XML文件,然后在内存中生成一个对应的javaBean.之前写的那个很是糟糕,照着一个XML去写了一个"Util ...
- 从源码角度深入分析log4j配置文件使用
log4j在日常开发中经常使用,但有时候对 配置文件应该放到什么位置有疑惑.现在我们通过从代码的角度来看待这个问题, 看完后你也许会恍然大悟哦. 开始吧. Log4j的组成及架构: Log4j由三个重 ...
- 从源码来理解slf4j的绑定,以及logback对配置文件的加载
项目中的日志系统使用的是slf4j + logback.slf4j作为一个简单日志门面,为各种loging APIs(像java.util.logging, logback, log4j)提供一个简单 ...
- spring资源访问接口和资源加载接口
spring 资源访问接口 JDK提供的资源访问类,如java.net.URL.File等,不能很好地满足各种资源的访问需求,比如缺少从类路径或者Web容器的上下文中获取资源的操作类. 鉴于此,spr ...
随机推荐
- 误删除libc.so.6的解决方法
误删除libc.so.6的解决方法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://63638790.blog.51cto. ...
- nodejs在cmd提示不是内部或外部命令解决方法
今天用cmd安装个库,结果发现node不是内部命令,于是搜索了下解决方法,发现原来我上次重装nodejs换了个安装位置,path环境变量忘改了. 找到变量值中node的安装地址,比如C:develop ...
- Angularjs directive全面解读(1.4.5)
说到Angularjs directive即指令,可以这么说Angularjs的灵魂就是指令,学会Angularjs指令那么你的Angularjs的武功就修炼了一半了,当然这只是鄙人的一点点独到见解, ...
- Python语法点滴
string: string.capitalize() 把字符串的第一个字符大写 string.startswith(obj) string.endswith(obj) string.find(s ...
- HDU-1757--A Simple Math Problem(矩阵乘法)
Problem Description Lele now is thinking about a simple function f(x).If x < 10 f(x) = x.If x > ...
- JAVA 并发编程关键点
上下文切换 死锁 volatile synchronized 原子操作 happens-before as-if serial 锁的内存 final 线程:daemon start suspend r ...
- android 进程和线程管理
进程和线程的概念: 进程:程序的运行实例. 线程:cpu调度基本单位. Activity启动的时候,启动一个主线程,两个binder线程. 主线程实如何产生的?ZygoteInit启动,经由一系列调用 ...
- React源码解析-Virtual DOM解析
前言:最近一直在研究React,看了陈屹先生所著的深入React技术栈,以及自己使用了这么长时间.对React应该说有比较深的理解了,正好前阵子也把两本关于前端设计模式的书看完了,总感觉有一种知识错综 ...
- 如何区分javascript中的方法(method)、函数(function)、事件(event)三个概念?
方法是程序对某操作的处理,比如show(),你可以在触发单击事件的时候调用show(),也可以在双击的时候调用. 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.比如自己写的倒计时函数,触 ...
- JavaScript的BOM(浏览器对象)基础语法总结
1.window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 2.history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. ...