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

转载 2015年07月07日 18:24:47

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

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().getResourceClass.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。

 

 

 

 

 

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

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

Class.getResource和ClassLoader.getResource的路径问题

Class.getResource(String path) path不以’/’开头时,默认是从此类所在的包下取资源; path 以’/’开头时,则是从ClassPath根下获取; 什么意思呢...

getResource的用法对于class和classloader

最近开始接触Java web项目,选择的服务器是tomcat。 获取资源文件(利用getResource方法进行总结) package com.temp; public class TestGe...

Web基础之Class与ClassLoader的getResource区别

在Web开发中经常要加载项目下的各种资源,有一种方法是用ClassLoader或者Class类提供的getResource来加载。本文将从代码上来分析两者的区别...

获得执行jar的运行路径-使用classloader的getResource方法

在Java处理的文件系统中,目录的表示方式有两种: (1)绝对目录,它以"/"为起始字符,代表从根目录下开始寻找给出的目录,如/c:/java (2)相对路径,它以不带“/”的目录...

java中Class.getResource用于获取类路径

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

Java class.getClassLoader().getResource("")获取资源路径

在开发中经常需要获取资源文件路径,例如读写配置文件等。Java也提供很多方法来获取这些路径,下面就几种常用到的作一下讨论区分: 1、xxx.class.getClassLoader().getRes...

JAVA反射使用实例和class.getResource()得到URL中含有中文和空格乱码问题

package invoke; import java.lang.reflect.Method; public class T1 {  public static void main(String[]...

getResource()函数的路径问题

getResource(“”)函数用于获取当前classpath,参数方面具体如下,目录结构具体如图: public class invokeShell implements Runnabl...
  • nx188
  • nx188
  • 2015年11月27日 11:55
  • 1158

getResource和getResourceAsStream以及路径问题

用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用Filefile =...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Class.getResource和ClassLoader.getResource的路径问题
举报原因:
原因补充:

(最多只允许输入30个字)