Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!

在开发Web方面的应用时, 经常需要获取 服务器中当前WebRoot的物理路径。

如果是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。

如果在类中取不到ServletContext时, 有两种方式可以做到:

1. 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录,这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式。

2. spring框架的思路, 在WEB-INF/web.xml中 , 创建一个webAppRootKey的param, 指定一个值(默认为webapp.root)作为键值, 然后通过Listener , 或者Filter , 或者Servlet 执行String webAppRootKey = getServletContext().getRealPath("/"); 并将webAppRootKey对应的webapp.root 分别作为Key , Value写到System Properties系统属性中。之后在程序中通过System.getProperty("webapp.root")来获得WebRoot的物理路径。

根据第二种的思路,我们还可以再扩展一下。不过对于在部署在一台服务器中的应用来说,若还不是你所需请再往下看。

下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径:

1. DebitNoteAction.class.getResource("")

得到的是当前类FileTest.class文件的URI目录。不包括自己!

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

atacarnet/src/com/evi/modules/atacarnet/action/

2. DebitNoteAction.class.getResource("/")

得到的是当前的classpath的绝对URI路径。

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

3. Thread.currentThread().getContextClassLoader().getResource("")

得到的也是当前ClassPath的绝对URI路径

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

4. DebitNoteAction.class.getClassLoader().getResource("") 或ClassLoader.getSystemResource("")

得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

5. 取得服务器相对路径

System.getProperty("user.dir")

例如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin

我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法

6. 取得项目中的绝对路径

一般用request.getRealPath("/")或request.getRealPath("/config/")

但现在不提倡使用request.getRealPath("/")了,大家可试用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径

要取得src的文件非常容易,因为src是默认的相对目录,比如你说要取得src下com目录的test.java文件,你只需要这样就够了

File f = new File(com/test.java);

但如果我要取得不在src目录或者WebRoot目录下的文件呢,而是要从src或者WebRoot同级的目录中取呢,比如说doc吧

我的硬方法是这样实现的:

String path = this.getServletContext().getRealPath("/");

Properties p = new Properties();

p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("\\WebRoot") + 1)) + "doc/db.properties")));

System.out.println(p.getProperty("driverName"));

原文链接:http://www.cn-java.com/www1/?action-viewnews-itemid-78354

转载于:https://www.cnblogs.com/mixer/archive/2011/01/19/2448834.html

Java或Web中解决所有路径问题相关推荐

  1. java 拦截所有路径_Java或Web中解决所有路径问题

    Java中使用的路径,分为两种:绝对路径和相对路径.归根结底,Java本质上只能使用绝对路径来寻找资源.所有的相对路径寻找资源的方法,都不过是一些便利方法.不过是API在底层帮助我们构建了绝对路径,从 ...

  2. web中的绝对路径和相对路径的概念及有什么区别

    web中的绝对路径和相对路径的概念及有什么区别 本篇文章主要介绍计算机中文件的绝对路径和相对路径有什么区别,自己凭着对他的理解,加上网上查找相关资料,写了如下.感兴趣的小伙伴们一定要看完! 一. 一个 ...

  3. java web jsp相对路径_Java Web中的相对路径与绝对路径总结

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www ...

  4. [原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. java获取WEB INF目录绝对路径

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JSP ...

  6. web中的URL路径——绝对路径和相对路径

    自身理解 绝对路径是指文件在硬盘上的真实路径,而相对路径指的是相对于另一个文件来书,本文件的路径.(个人理解是,既然能用相对路径表示那也就说明了这两个问价同属于一个文件集下,如果一个在你的电脑,一个在 ...

  7. java获取web项目的绝对路径的方法总结

    一.用Jsp获取1.获取文件的绝对路径String file="文件";(例如:data.mdb)String path=application.getRealPath(file) ...

  8. java jsonresult_java web中统一结果返回封装类JsonResult

    packagecom.yb.entity;importjava.util.List;importcom.fasterxml.jackson.databind.JsonNode;importcom.fa ...

  9. 用java实现web中闹钟小功能_Java多线程小练习,闹钟

    package com.konghao.test; //闹钟类 public class Alarm implements Runnable { private boolean isWork; //闹 ...

  10. java的相对路径用法_java项目中的绝对路径和相对路径用法说明

    java项目中的绝对路径和相对路径用法说明 绝对路径:不可改变的路径 本地绝对路径:增加盘符的路径(e:/test/test.html) 网络绝对路径:增加协议,IP地址,端口号的路径(http:// ...

最新文章

  1. 主流浏览器的HTTP最大并发连接数
  2. 你应该知道的 RPC 原理
  3. .net html转为pdf,.NET使用DinkToPdf将HTML转成PDF的示例代码
  4. Linux学习一天一个命令(2)[cd命令]
  5. C语言的一些误用和知识总结
  6. javascript--识别判断浏览器
  7. c语言 mysql 查询数字_使用mysql C语言API编写程序—MYSQL数据库查询操作
  8. DICOM笔记-使用DCMTK库的DcmOutputBufferStream类将DICOM信息序列化到内存中
  9. 周云的FLASH小游戏开发教室_基础篇
  10. PS改变图片颜色的方法
  11. 基于openGauss的五子棋AI项目
  12. 管理与维护linux系统(任务五 六 七 八)
  13. Rasa 3.x 学习系列-Rasa [3.4.0] - 2022-12-14新版本发布
  14. 盘点2018上半年最受欢迎的前端开发!
  15. 数据压缩实验八:MPEG音频压缩编码
  16. 什么是嵌入式?嵌入式开发怎么学
  17. 小白如何学习运营公众号?
  18. CLIP 改进工作串讲(下)
  19. 流水线作业调度问题c语言,流水线作业调度问题
  20. 2021-Java面试题(03-29已更新)

热门文章

  1. 解决DELL服务器每次开机提示F1F2,需要F1才可以进系统的方法
  2. UIWebView的离线缓存
  3. Linux内核网络参数的意义及应用
  4. tensorflow自定义op_TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
  5. android创建wifi热点,Android 4.0.3创建wifi热点API
  6. 大学计算机python考试题二叉树_leetcode 二叉树相关习题总结
  7. Java与mysql数据库编程中遇见“Before start of result set at com.mysql.jdbc.SQLError.createSQLException” 的解决办法
  8. Redis 6.0 源码阅读笔记(13 ) -- Redis 集群节点选举流程
  9. python类的属性前加上双下划线_Python中使用双下划线防止类属性被覆盖问题
  10. 国家开放大学2021春1067知识产权法题目