文档章节

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

L
 LuckyHei
发布于 2016/03/29 14:13
字数 472
阅读 7
收藏 0
点赞 1
评论 0

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

 

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

共有 人打赏支持
L
粉丝 0
博文 1
码字总数 0
作品 0
广州

暂无文章

七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
3分钟前
0
0
Confluence 6 配置快捷链接

快捷链接提供了提供了一个在 Confluence 中访问从常用资源的快速方法。当你创建一个快捷链接的时候,你需要为你的快捷链接 URL 指派一个 Key,用户可以在 Confluence 中只输入这个 Key 用来替...

honeymose
3分钟前
0
0
我的第一篇博文

网络界的前辈们好。本人从接触网络到你现在也有4、5年的时间了,期间不断的通过网络学习,当然也没少看大牛们给的建议。 2011年的9月份,如愿以偿的上了“大学”,刚上大学就接触到了一门叫做...

yeahlife
29分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
35分钟前
0
0
双向认证-nginx

1、设置容器 docker run -it --name nginx-test2 -v /home/nginx:/apps -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -p 8183:80 -p 7443:443 -d nginx:stable 2、修改nginx配......

hotsmile
35分钟前
0
0
深入了解 Java 自动内存管理机制及性能优化

一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《Java虚拟机规范(Java SE 7 版)》的规...

Java大蜗牛
37分钟前
4
0
SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于Spring和SpringMvc...

oKong
38分钟前
7
0
云数据库架构演进与实践

如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。 微服务,也就是一种面向服务的,有特定边界的松...

巨杉数据库
39分钟前
0
0
Linux系统梳理---系统搭建(一):jdk卸载与安装

1.去官网下载符合Linux版本的jdk,暂用jdk-8u171-linux-x64.rpm 2.登陆Linux,进入usr目录,创建java目录(方便管理,可以其他位置):mkdir java 3.上传下载的jdk包至Linux服务器,使用rz指令(sz f...

勤奋的蚂蚁
49分钟前
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

六库科技
52分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部