标签:getresource classloader 获取路径 相对路径 绝对路径
文件结构图:
以下为在多个场景下使用方式的代码:
package com.wenniuwuren.test; /** * 获取文件路径 * Created by wenniuwuren on 15/8/14. */ public class GetResourceTest { public static void main(String[] args) { // 带 “/” 的其实就是返回根目录 System.out.println("GetResourceTest.class.getResource(\"/\") -----> " + GetResourceTest.class.getResource("/")); System.out.println("GetResourceTest.class.getResource(\"/DD.DD\") -----> " + GetResourceTest.class.getResource("/DD.DD")); // ************************************************* // 返回当前路径 System.out.println("GetResourceTest.class.getResource(\"\") -----> " + GetResourceTest.class.getResource("")); System.out.println("GetResourceTest.class.getResource(\"AA.AA\") -----> " + GetResourceTest.class.getResource("AA.AA")); System.out.println("GetResourceTest.class.getResource(\"subtest/BB.BB\") -----> " + GetResourceTest.class.getResource("subtest/BB.BB")); System.out.println("GetResourceTest.class.getResource(\"../CC.CC\") -----> " + GetResourceTest.class.getResource("../CC.CC")); // 查找classloader root。 用 getClassLoader 最容易出问题, 因为是根据类加载器来的, 类加载器多种多样可能在不同环境下产生不同结果 GetResourceTest getResourceTest = new GetResourceTest(); System.out.println("getResourceTest.getClass().getClassLoader().getResource(\"\") -----> " + getResourceTest.getClass().getClassLoader().getResource("")); System.out.println("getResourceTest.getClass().getClassLoader().getResource(\"/\") -----> " + getResourceTest.getClass().getClassLoader().getResource("/")); /** * 从输出结果来看总结上述: Class.class.getResource("/") == Class.getClass().getClassLoader().getResource("") */ // 这是一种可以避免在不同Web容器下获取路径异常的方法 System.out.println("GetResourceTest.class.getProtectionDomain().getCodeSource().getLocation().getPath() -----> " + GetResourceTest.class.getProtectionDomain().getCodeSource().getLocation().getPath()); } }
public java.net.URL getResource(String name) { name = resolveName(name); ClassLoader cl = getClassLoader0(); if (cl==null) { // A system class. return ClassLoader.getSystemResource(name); } return cl.getResource(name); }
public URL getResource(String name) { URL url; if (parent != null) { url = parent.getResource(name); } else { url = getBootstrapResource(name); } if (url == null) { url = findResource(name); } return url; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Class.getResource和ClassLoader.getResource区别与分析
标签:getresource classloader 获取路径 相对路径 绝对路径
原文地址:http://blog.csdn.net/wenniuwuren/article/details/48041019