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/
?? 取得效劳器相对路径
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"));文章由 italywa.tk 静脉曲张袜效果怎么样 整理,收集辛苦,希望能保留出处。