Java web 中解决路径 (绝对路径与相对路径) 问题
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 Java Web 中解决路径问题的相关资料, java 文件路径有绝对路径与相对路径, 这里提供了几种方法解决所有路径问题, 需要的朋友可以参考下
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. 取得服务器相对路径
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.phperz.com/article/18/0211/358923.html