java或者web中解决所有的路径问题

开发 后端
本片文章就java或者web中所有的路径问题做出了解决,希望对大家有所帮助。

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. 取得服务器相对路径

 

  1. 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文件,你只需要这样就够了

 

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

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

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

 

  1. String path = this.getServletContext().getRealPath("/");  
  2.  
  3. Properties p = new Properties();  
  4.  
  5. p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("\\WebRoot") + 1)) + "doc/db.properties")));  
  6.  
  7. System.out.println(p.getProperty("driverName"));  

【编辑推荐】

  1. Java中相对路径,绝对路径问题总结
  2. 管理Java类路径(UNIX和Mac OS X)
  3. 管理Java类路径(Windows)
  4. 在java中找到需要的资源文件路径
  5. 关于Tar包压缩时相对路径的小问题
  6. Java路径的分类与使用注意事项

 

责任编辑:金贺 来源: JavaEye博客
相关推荐

2009-06-19 11:16:14

java web中文乱码

2012-03-09 10:27:37

Java

2009-06-12 09:40:20

Java equalsequals方法等值方法

2015-07-29 10:54:58

Java 8包列表

2009-07-17 16:19:16

Swing核心组件

2015-07-10 09:15:47

LeakCanary内存泄漏

2022-04-04 07:51:32

Web框架

2009-08-07 14:47:23

C#路径问题

2020-10-27 10:16:11

只读Web路径的Web

2019-05-07 16:19:03

MySQL存储引擎

2020-05-12 15:40:06

MySQ数据库索引

2010-07-27 09:06:11

Ruby on Rai

2022-05-10 11:38:30

Web3.0知网互联网

2022-10-13 14:11:29

浏览器域名端口

2013-08-01 10:48:08

UI设计App

2018-02-24 15:40:06

LinuxBashShell

2015-08-27 14:04:08

微信硬件社交

2014-04-28 10:26:33

编程Web编程

2011-02-23 13:48:05

Web

2021-01-18 14:22:26

QQ浏览记录程序员
点赞
收藏

51CTO技术栈公众号