本文转自:http://www.cnblogs.com/yejg1212/p/3270152.html

Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题。

Class.getResource(String path)

path不以’/'开头时,默认是从此类所在的包下取资源;
path  以’/'开头时,则是从ClassPath根下获取;

什么意思呢?看下面这段代码的输出结果就明白了:

package testpackage;
public class TestMain {public static void main(String[] args) {System.out.println(TestMain.class.getResource(""));System.out.println(TestMain.class.getResource("/"));}
}

输出结果:

file:/E:/workspace/Test/bin/testpackage/
file:/E:/workspace/Test/bin/

上面说到的【path以’/'开头时,则是从ClassPath根下获取;】在这里就是相当于bin目录(Eclipse环境下)。

再来一个实例,假设有如下Project结构:

如果我们想在TestMain.java中分别取到1~3.properties文件,该怎么写路径呢?代码如下:

package testpackage;public class TestMain {public static void main(String[] args) {// 当前类(class)所在的包目录System.out.println(TestMain.class.getResource(""));// class path根目录System.out.println(TestMain.class.getResource("/"));// TestMain.class在<bin>/testpackage包中// 2.properties  在<bin>/testpackage包中System.out.println(TestMain.class.getResource("2.properties"));// TestMain.class在<bin>/testpackage包中// 3.properties  在<bin>/testpackage.subpackage包中System.out.println(TestMain.class.getResource("subpackage/3.properties"));// TestMain.class在<bin>/testpackage包中// 1.properties  在bin目录(class根目录)System.out.println(TestMain.class.getResource("/1.properties"));}
}

※Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。

Class.getClassLoader().getResource(String path)

path不能以’/'开头时;
path是从ClassPath根下获取;

还是先看一下下面这段代码的输出:

package testpackage;
public class TestMain {public static void main(String[] args) {TestMain t = new TestMain();System.out.println(t.getClass());System.out.println(t.getClass().getClassLoader());System.out.println(t.getClass().getClassLoader().getResource(""));System.out.println(t.getClass().getClassLoader().getResource("/"));//null}
}

输出结果:

class testpackage.TestMain
sun.misc.Launcher$AppClassLoader@1fb8ee3
file:/E:/workspace/Test/bin/
null

从结果来看【TestMain.class.getResource("/") == t.getClass().getClassLoader().getResource("")】

如果有同样的Project结构

使用Class.getClassLoader().getResource(String path)可以这么写:

package testpackage;public class TestMain {public static void main(String[] args) {TestMain t = new TestMain();System.out.println(t.getClass().getClassLoader().getResource(""));System.out.println(t.getClass().getClassLoader().getResource("1.properties"));System.out.println(t.getClass().getClassLoader().getResource("testpackage/2.properties"));System.out.println(t.getClass().getClassLoader().getResource("testpackage/subpackage/3.properties"));}
}

※Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。

关于Class.getResource和ClassLoader.getResource的路径问题相关推荐

  1. Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()解析

    this.class.getClassLoader()解析 java是面向对象语言,面向对象的语言的宗旨就是万事万物皆对象,那么类.类里面的属性和方法都是对象.java里面的所有的类都是Class类的 ...

  2. Class.getResource和ClassLoader.getResource

    一案例驱动 二源码分析 三类加载器ClassLoader 四总结 五参考 一案例驱动 最近加载文件的时候遇到了一个问题,很有意思! 具体看下面案例代码 public class TestClassLo ...

  3. Class.getResource和ClassLoader.getResource的区别分析

    原文:http://swiftlet.net/archives/868 在Java中获取资源的时候,经常用到Class.getResource和ClassLoader.getResource,本文给大 ...

  4. Class的getResource与ClassLoader的getResource路径/问题

    一.Class的getResource(String path):URL 1.path 不以'/'开头时,默认是从此类所在的包下取资源: 2.path 以'/'开头时,则是从ClassPath根下获取 ...

  5. 使用Fastdfs上传文件时出现中文乱码。工具类中的this.getClass().getResource(“/“).getPath()获取配置文件的路径时中文乱码。

    报错: Exception in thread "main" org.csource.common.MyException: item "tracker_server&q ...

  6. getResource()的几种路径方式

    1. 前言 在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异. 2.Class.getResource(St ...

  7. java中Class.getResource用法(用于配置文件的读取)

    用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file ...

  8. Class.getResource()与Class.getClassLoader().getResource()解析

    我们在eclipse上写的.java文件最终会被编译成一个.class的字节码文件.而java源文件存储在src文件下,而编译后的.class字节码文件存储在bin文件下. 一. 通过Class.ge ...

  9. Java 中的 getResource 方法

    getResource 的作用 getResource为Class类中的一个方法 作用:配置文件的读取 Class 的概念 首先我们得知道,在new一个对象的时候,会在java堆中生成一个代表这个类的 ...

最新文章

  1. 微信小程序限制当前位置和目的地的距离
  2. python小爬虫之天气查询
  3. javaweb:servlet
  4. 【AI产品】如何让Google的AI给你捕捉最美的自拍瞬间
  5. JavaWeb 入门篇 (5) Cookie 和 Session 详解
  6. SGU 294 He's Circles (polay计数)
  7. SQL注入(SQL注入(SQLi)攻击)攻击-联合注入
  8. linux夏令时配置文件,Linux夏令时是怎么调整的?
  9. [css] 说说你对table-layout的理解,它有什么运用场景?
  10. Android中Audio框架
  11. 收集下载电影的好网站
  12. 谷歌中国追求中国式生存
  13. 计算机毕业设计基于asp.net的旅游网站
  14. 大道至简,职场上做人做事做管理
  15. Processing 案例 | 用粒子系统谱写冰与火之歌
  16. 表格对角线两边打字_表格对角线两边打字_表格斜线一分为二怎么打字(excel斜杠分割表格打字)...
  17. 软件测试里面关于网络抓包的学习笔记思考
  18. 提示语默认显示标签:placeholder
  19. 数据库(DataBase)-数据库级别MD5加密
  20. JavaScript - onunload失效

热门文章

  1. vue文件快速生成模板代码
  2. python 获取当前时间和日期
  3. 十二、八皇后问题(递归回溯)
  4. Python基础总结(3)
  5. Jekyll博客统计访问量,阅读量工具总结--LeanCloud,不蒜子,Valine,Google Analytics
  6. 中职 学生学php学什么区别,职业高中和中专的区别是什么?哪个学历高
  7. unicode utf8 转换 php,php实现utf-8转unicode函数分享
  8. php语句拼装,Thinkphp语句拼接
  9. 我的世界java版背景图更换_《我的世界手机版》如何修改界面背景 界面背景修改攻略图文教程...
  10. 操作所有的数据库免费可视化界面靠它就够了,告别付费,告别白嫖,卸载Navicat!