Java获取类路径路径的几种方式

扫一扫体验手机阅读
Java 获取资源路径的3种方法与区别
而图像资源比如sample.gif应该放置在com/ketqi/sample.gif
而如果这些图像资源放置在icons目录下,则应该是com/ketqi/icons/sample.gif
通过当前类文件的路径获取资源主要有如下几种方式:
& 假设当前类为com.ketqi.Test
& 包所在的文件夹为bin
String imageName = &icons/sample.gif&
1, 通过Class.getResource()定位类路径下的资源(bin/com/ketqi/icons/sample.gif)
Class clazz = this.getClass();
URL url = clazz.getResource(imageName);
2,通过ClassLoader.getResource()定位包的根目录下的资源(bin/icons/sample.gif)
Class clazz = this.getClass();
URLClassLoader loader = (URLClassLoader)clazz.getClassLoader();
URL url = loader.getResource(imageName);
3, 通过ClassLoader.findResource()提供自己定制的方式定位资源
URL url = loader.findResource(imageName);
◆那么这三种方法有那些区别, 我们应该在何时使用哪种方法呢?
& Class.getResource() 方法
该方法实际通过该Class的Class Loader的getResource()方法来获得资源, 在调用ClassLoader的getResource()方法之前, Class.getResource()方法会对资源名称做一定的处理,构建一个该资源的绝对名称(absolute name, 大意是:如果资源名称以'/'('&u002f') 开始, 则资源的绝对名称是'/'以后的部分.&如果imageName是&/icons/sample.gif&, 则在这里会变成&icons/sample.gif&+否则对于其他情况, 绝对名称将是如下形式(给资源名称的前面加上modified_package_name/):&modified_package_name/resource_name (修正的包名称/资源名称)
其中修正的包名称含义是将当前对象所在的包名称中的'.'('&u002e')替换为'/'如果ClassLoader.getResource()方法返回一个值为null的URL, 则Class.getResource()方法最终会将资源请求交给ClassLoader.getSystemResource(java.lang.String).
& ClassLoader.getResource() 方法该对资源进行查找, 资源的名称是以'/'分隔的路径, 这个方法首先查找自己的父亲ClassLoader, 由自己的父ClassLoader来查找资源(实际上, 如果父亲的父亲不是空, 则父亲仍会向上提交查找请求). 如果自己的父ClassLoader是null, 则查找Java虚拟机中内建的class loader, 并将资源请求提交给它们, 如果这些操作都失败了, 则ClassLoader会调用自己的findResource()方法来查找资源.
& ClassLoader.findResource() 方法该方法在内部查找指定的资源, 如果你实现了自己的Class Loader,则应该重载这个方法以自己特定的方式来查找类文件和资源.
◆通过以上的总结, 我们可以看到三点.
1, 无论是getResource(), 还是findResource(), 这些方法都只是资源的定位方法, 最终都只是返回一个URL, 只是对资源的定位而已, 我们随后应通过自己的方法来读取这些资源. 而在Class和ClassLoader中还定义的有getResourceAsStream方法, 该方法是getResource的增强版, 这里就不介绍了.
2,如果需要以类为相对路径查找资源, 则应该调用Class.getResource()方法, 不要直接调用
ClassLoader.getResource()方法. 另外, 除非是你自己定义了ClassLoader并重载了findResource方法,否则也不要直接调用ClassLoader.findResource方法, 因为在Class.getResource()方法中会对资源名称作一定的处理, 这在上面介绍了, 下面举个实例:&假设我的当前类在intellij工程Database下, 类所在的包是com.ketqi.test, 而icons目录放在bin/com/ketqi/test/目录下, 我需要得到icons/sample.gif文件的URL, 则调用this.getClass().getResource()得到的URL是:&file:/E:/projects/intellij/bin/com/ketqi/test/icons/sample.gif
&3, 有时候我们希望某个jar库的图像资源在同一个icons下统一管理, 而不是为每个包下面的Class建一个icons, 也就是说需要以库为相对路径来查找资源, 此时则应该调用ClassLoader.getResource()方法, 举个例子:
&某个工程有如下的包结构:
&& & & com.ketqi.other
&& & & com.ketqi.test
&& & & com.ketqi.database
&如果以类为相对路径, 则在每个包下都必须建立一个icons目录, 并放置相应的资源文件. 如下:
&& & & com.ketqi.other/icons/...
&& & & com.ketqi.test/icons/...
&& & & com.ketqi.database/icons/...
&而我们可能希望在根目录下放置一个icons目录, 把所有资源放置在这里管理, 这样还可以防止资源的重复.&
就是如下形式
&& & & com.ketqi.other
&& & & com.ketqi.test
&& & & com.ketqi.database
&& & & icons/sample.gif ...
&& & & 则此时我们应该调用ClassLoader.getResource方法, 由于它没有对资源名称作处理, 也就是说没有将修正的包名添加到资源名称前, 所以它会在类所在的包的根下去查找资源.(运行java程序的语法是java&com.ketqi.other.Test, 所以根目录是com目录的上级目录).
<span type="1" blog_id="325255" userid='
30篇文章,22W+人气,0粉丝
大数据时代的微服务之路
¥51.00485人订阅
<span type="1" blog_id="325255" userid='java获取项目路径的几种方法总结
前端获取当前项目路径:
&script type="text/javascript"&
//项目上下文
var context="&%=request.getContextPath()%&";
1.得到当前工程的根路径,代码如下
String path = request.getContextPath();
2.得到登录的计算机域名,如果没有域名就得到IP
request.getRemoteHost();
3.得到登录计算机的IP
request.getRemoteAddr();
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
一般我们做项目时候基本都会碰到上传文件,本人亲测,上传文件后端必须得用绝对路径,用项目名 的路径方法是行不通的。但是有时候由于服务器的分布式布局,绝对路径写死是很麻烦的时候,所以最后是从代码中读取路径。
1、String path = request.getContextPath();
运行在Tomcat得到的路径 /talentrecommend01
2、String path1 = System.getProperty(“user.dir”);
运行在Tomcat上得到的路径 E:\apache-tomcat-7.0.65\bin
未运行Tomcat时得到的路径 E:\myeclipse\project\talentrecommend01
System.getProperty(“参数”),根据参数的不同可以得到很多值,具体有哪些参数可百度。
3、String path2 = request.getServletContext().getRealPath(“/”) ;
运行在Tomcat服务器上得到的路径 E:\apache-tomcat-7.0.65\webapps\talentrecommend01\
这三种最常用的方法是3,最好有个办法把path2放在一个全局变量中,且在项目运行时候生成一次,项目结束时候摧毁
知识有限,我只把它单独放在一个类中
public class SystemUtil {
* @author cy
* @description 得到项目的根目录的绝对路径
public static String getPath(HttpServletRequest request){
String path = request.getServletContext().getRealPath(“/”);
path = path.replaceAll(“\\”, “/”);
个人检测:
没有更多推荐了,比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
Java获得web的根路径的应用技巧
关键字:Java Web 路径
 企业软件热点文章
  java获取根路径有两种方式:
  1),在servlet可以用一下方法取得:
  request.getRealPath(“/”) 例如:filepach = request.getRealPath(“/”)+”//upload//”;
  2),不从jsp,或servlet中获取,只从普通java类中获取:
  String path =
  getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
  SAXReader() saxReader = new SAXReader();
  if(path.indexOf(“WEB-INF”)&0){
  path = path.substring(0,path.indexOf(“/WEB-INF/classes”)+16);
  // ‘/WEB-INF/classes’为16位
  document = saxReader.read(path+filename);
  }else{
  document = saxReader.read(getClass().getResourceAsStream(filename));
  weblogic tomcat 下都有效
  String path =
  getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
[ 责任编辑:之极 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注ChinabyteJava获取路径的几种方式_百度知道
Java获取路径的几种方式
我有更好的答案
获取当前类的绝对路径;第1种:File directory = new File(&&);//参数为空String courseFile = directory.getCanonicalPath() ;System.out.println(courseFile);结果:C:&#92;Documents and Settings&#92;Administrator&#92;workspace&#92;projectName获取当前类的所在工程路径;第2种:URL xmlpath = this.getClass().getClassLoader().getResource(&selected.txt&);System.out.println(xmlpath);结果:file:/C:/Documents%20and%20Settings/Administrator/workspace/projectName/bin/selected.txt获取当前工程src目录下selected.txt文件的路径第3种:System.out.println(System.getProperty(&user.dir&));结果:C:&#92;Documents and Settings&#92;Administrator&#92;workspace&#92;projectName获取当前工程路径第4种:System.out.println( System.getProperty(&java.class.path&));结果:C:&#92;Documents and Settings&#92;Administrator&#92;workspace&#92;projectName&#92;bin获取当前工程路径
主营:教育、培训、电脑,互联网,大学,学历,IT,计算机
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Java获取当前路径的几种方法
1、利用System.getProperty()函数获取当前路径:
System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径
2、使用File提供的函数获取当前路径:
File directory = new File("");//设定为当前文件夹
System.out.println(directory.getCanonicalPath());//获取标准的路径
System.out.println(directory.getAbsolutePath());//获取绝对路径
}catch(Exceptin e){}
File.getCanonicalPath()和File.getAbsolutePath()大约只是对于new File(".")和new File("..")两种路径有所区别。
# 对于getCanonicalPath()函数,“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹
# 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径
# 至于getPath()函数,得到的只是你在new File()时设定的路径
比如当前的路径为 C:/test :
File directory = new File("abc");
directory.getCanonicalPath(); //得到的是C:/test/abc
directory.getAbsolutePath(); //得到的是C:/test/abc
direcotry.getPath(); //得到的是abc
File directory = new File(".");
directory.getCanonicalPath(); //得到的是C:/test
directory.getAbsolutePath(); //得到的是C:/test/.
direcotry.getPath(); //得到的是.
File directory = new File("..");
directory.getCanonicalPath(); //得到的是C:/
directory.getAbsolutePath(); //得到的是C:/test/..
direcotry.getPath(); //得到的是..
JAVA中获取路径
关键字: java中获取路径
JAVA中获取路径:
1.jsp中取得路径:
以工程名为TEST为例:
(1)得到包含工程名的当前页面全路径:request.getRequestURI()
结果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
结果:/TEST
(3)得到当前页面所在目录下全名称:request.getServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/test.jsp
(4)得到页面所在服务器的全路径:application.getRealPath("页面.jsp")
结果:D:/resin/webapps/TEST/test.jsp
(5)得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
结果:D:/resin/webapps/TEST
2.在类中取得路径:
(1)类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:System.getProperty("user.dir")
结果:D:/TEST
3.在Servlet中取得路径:
(1)得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:/Tomcat/webapps/TEST
(2)得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/TEST/test
(3)得到相对地址:request.getRequestURI()
结果:/TEST/test
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
百胜帝宝娱乐官网
百胜钻石汽车保养官网
今日搜狐热点

我要回帖

更多关于 Java获取路径 的文章

 

随机推荐