Java中获取路径的方法_自我分析
就目前的我来说最常用的两种获取路径的方法是
class.getRecource(filename) 和 class.getclassloader.getRecource(filename)
这两者的区别其实很简单就是路径的时候有点不同,这里主要讲两个参数,其他的路径获取,其他的话在根据相对路径逐一查找就行了
class.getRecource(filename):
参数"/" | 表示获取根目录; (即我们常用到的bin目录【字节码文件存放的目录】 |
" " | 表示获取当前类路径 |
class.getclassloader.getRecourc(filename):
参数“/” | 是null值得,因为底层是c++写的 |
“ “ | 便是获取根目录(即bin目录) |
好了,具体怎么来实现,
通过一个例子来了解吧
对于这个bin目录下的1.txt怎么获取呢
String url=test6.class.getResource("/1.txt").getFile();
url1=test6.class.getClassLoader().getResource("1.txt").getFile();
结果:/F:/CheckOut/workspacefuxi/Thread_1/bin/1.txt
String url=test6.class.getResource("").getFile();
CheckOut/workspacefuxi/Thread_1/bin/Test1/
那为什么会出现这种情况呢?
那我们来分析一下他的源码,这是class.getRecource()的源码:
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);
}
这里就可以很明确的看到最终他还是要执行cl.getResource(name),等于就是执行了class.getClassLoader().getRecource()方法
所以来说这两者实际上是一致的
来为什么在获取路径上的时候出现了分歧呢,来让我来在看一下resolveName(name)的源码
这样就可以很明确理解两者为何会是这样的情况了
private String resolveName(String name) {
if (name == null) {
return name;
}
if (!name.startsWith("/")) {
Class c = this;
while (c.isArray()) {
c = c.getComponentType();
}
String baseName = c.getName();
int index = baseName.lastIndexOf('.');
if (index != -1) {
name = baseName.substring(0, index).replace('.', '/')
+"/"+name;
}
} else { //这里就可以很清楚知道有'/'时候会把它去掉
name = name.substring(1);
}
return name;
}
最后呢我还想说说getclassLoader()的作用:
这是网上的一段比较好的解释:
Java是面向对象语言,面向对象的语言的宗旨就是万事万物皆对象,那么类也是一个对象,类里面的属性和方法也是对象。Java里面的所
有的类都是Class类的对象,这个this.class是获得这个类相对于Class类的对象。后面的方法是获得这个类对象的加载器。
只有Class类才有getClassLoader()方法呀~ 可以这么想,我们平时讲述某某类,但是我们并没有说这个类怎么和虚拟机打交道,虚拟机怎么识别这
个类.总不能全靠字符串吧. 所以呢java就设计了Class这个类.用于虚拟机对类的管理.当一个类被虚拟机装载完毕的时候,就会创建一个Class类
的实例,对于类A就是A.class,对于类B就是B.class. Class类也提供了许多方法来获取类的信息. 要知道,类的装载器分为 "启动类装载器 ", "用
户定义装载器 ".它不止一种 Class类需要保存这些信息. getClassLoader()是用来获取这个信息的
Java中获取路径的方法_自我分析的更多相关文章
- java中获取路径的方法
在class获取路径的方法,getResource有没有“\”的区别 System.out.println("" + this.getClass().getResource(&qu ...
- JAVA中获取路径
内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径: 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.get ...
- java中获取路径中的空格处理(%20)问题
在java中获取文件路径的时候,有时候会获取到空格,但是在中文编码环境下,空格会变成“%20”从而使得路径错误. 解决办法: String path = Parameter.class.getReso ...
- java中获取路径的几种基本的方法
package com.ygh.blog.realpath; import java.io.File; import java.io.IOException; import java.io.Input ...
- Java中获取路径的各种方法
1. java文件中获得路径 Thread.currentThread().getContextClassLoader().getResource("") //获得资源文件(.cl ...
- java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)
interface接口参数 jdk1.7及以前使用spring功能实现的: 注意: 1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名. public static void test() ...
- java中获取路径的几种方式
总是忘记, 备份一下,方便下次用. 第一种: File directory = new File("");//参数为空 String courseFile = directory. ...
- java中获取ServletContext常见方法
http://blog.sina.com.cn/s/blog_3fe961ae0100wjnf.html 1.在javax.servlet.Filter中直接获取 ServletContext con ...
- Java中获取ServletContext的方法
Servlet: this.getServletContext() this.getServletConfig().getServletContext() request.getSession().g ...
随机推荐
- hdu_5904_LCIS(DP)
题目链接:hdu_5904_LCIS 题意: 给你两串数,让你找这两串数的最长公共子序列,并且这个最长公共子序列是连续的数值 题解: 我们首先先分别处理出a,b的每个数的最长连续的长度 然后随便找一串 ...
- HttpModule的基本概念
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/stwyhm/archive/2006/08/09/471765.html HttpModule是如何工作的 当一个HT ...
- SSL读书笔记
摘要: 第一次写博客,为读书笔记,参考书目如下: <HTTP权威指南> <图解HTTP> <大型分布式网站架构设计与实践> 作者:陈康贤 一. HTTP+SSL=H ...
- 关于string的对象引用
什么都不说了, 一切都在代码里: Console.WriteLine(object.ReferenceEquals(c5, c4)); //False ...
- OMCS开发手册(02) -- 多媒体连接器
OMCS开发手册(01) -- 多媒体设备管理器 一文,我们从Owner的角度详细描述了多媒体设备管理器的使用,本文我们将站在Guest的角度,描述OMCS中另一类组件/控件:多媒体连接器.多媒体连接 ...
- webapi中的扩展点
Extension Points Web API provides extension points for some parts of the routing process. Interface ...
- LeetCode OJ 123. Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- Arch下载官方镜像列表Official mirrors
Official mirrors The official Arch Linux mirror list is available from the pacman-mirrorlist package ...
- Chapter 16_2 继承
类也是对象,所有它们也可以从其他类获得方法.这就是“继承”,可以在Lua中表示: Account = { balance = } function Account:new(o) o = o or {} ...
- 解决MOSS列表匿名访问问题
//匿名 http://blog.csdn.net/yang_5/article/details/5214293 这是发布以后MOSS网站,如果你一开始在内部都没有启用匿名访问,你设置这个是不启作用 ...