Java中动态获取项目根目录的绝对路径
https://www.cnblogs.com/zhouqing/archive/2012/11/10/2757774.html
序言
在开发过程中经常会用到读写文件,其中就必然涉及路径问题。使用固定的绝对路径当然很方便,但会导致程序的可移植性差,比如在代码中写死了要在E盘建一个文件,而移植后的环境中木有E盘,那就只能改代码;又或者需要调用D盘某某某很长路径下的一个自定义文件,这个文件路径又不在项目文件夹下,则拷项目代码时很容易遗漏这个自定义文件,这样给项目的交接带来了不必要的麻烦。如果我们将自定义配置文件或者其他待访问的文件都放在项目根目录下的某个文件夹中,在运行时动态获取项目根目录,则能大大提升项目的可移植性。注意,Tomcat下的Web程序的项目根目录是在Tomcat根目录的webapps\项目名 下,而Java桌面程序的项目根目录是在源代码所在的文件夹下。
这个想法从我最开始做涉及文件存取的项目时就想到了,但是实践中经常失败,因为不同情况下(Tomcat下的Web程序、Java桌面程序)获取项目根目录的方法是不一样的,同样的(new File("")).getAbsolutePath()方法在Web环境下或桌面程序环境下的结果不一样,不一一分析和测试的话就会绕晕。于是最近我专门花了点时间研究了下,发现其实也不复杂。我的测试环境为:MyEclipse1.6.0;Tomcat6.0.1,其根目录为"D:\Program Files\Java\tomcat6.0.1";项目源文件所在根目录为"D:\CHLOE\IT\java\eclipse_workspace\tests"。
正文
1. 在jsp文件或Servlet中,可以通过getServletContext().getRealPath("/")来获取项目根目录的绝对路径。
testServletPath.jsp

1 <body>
2 <h1>jsp文件中获得项目根目录绝对路径</h1>
3 <%
4 String realPath=getServletContext().getRealPath("/");//项目绝对路径
5 %>
6 项目根目录的绝对路径为:<%=realPath %>
7 </body>
8 </html>

访问结果:
jsp文件中获得项目根目录绝对路径
项目根目录的绝对路径为:D:\Program Files\Java\tomcat6.0.1\webapps\tests\
在Servlet中可以使用同样的方法,得到同样的结果,毕竟jsp文件中的内容在本质上跟Servlet是一回事。getServletContext().getRealPath("/")很好用,但仅仅适用于jsp文件和Servlet中,因为这是一个Servlet API。
2. Java桌面程序中,可以通过(new File("")).getAbsolutePath()获取项目根目录(非Tomcat下)。
PathTest.jsp

1 package chloe.aboutpath;
2
3 import java.io.File;
4 public class PathTest
5 {
6 static String abspath;
7 static public String getPath()
8 {
9
10 File file=new File("");
11 abspath=file.getAbsolutePath();
12 return abspath;
13 }
14 public static void main(String args[])throws Exception
15 {
16 System.out.println(getPath());
17 }
18 }

运行结果为:
D:\CHLOE\IT\java\eclipse_workspace\tests
3. 在Tomcat下运行的类中,(new File("")).getAbsolutePath()获得的路径是Tomcat安装路径下的bin文件夹下,将获得的路径字符串去掉最后的"bin"再添上"webapps\\项目文件夹名"即可。
经过测试代码的运行,我发现只要是在Tomcat环境中运行的代码,如Jsp、Servlet、Servlet调用的Java类、Servlet调用的Java类所调用的Java类等等,由(new File("")).getAbsolutePath()获得路径均为Tomcat根目录下的bin文件夹下,测试代码与PathTest.java中的基本一样,这里不再赘述。
总结
在大多数情况下,我们都是用Java开发Web程序。根据我个人习惯,如果在jsp文件或者Servlet中需要用到项目的根目录,则采用getServletContext().getRealPath("/"),因为这个最方便,不需要进一步处理,如果在Servlet调用的其他普通类中需要获得项目根目录,则使用(new File("")).getAbsolutePath(),再稍作处理。另外,jsp文件中资源的相对路径在没有特别声明的情况下是相对于本文件所在的位置,可以通过在路径字符串的前端加上".."进入上一级文件夹后继续定位,如"../ckeditor/ckeditor.js";默认情况下,指定form的action为某Servlet时,应该使用"/servlet/Servletname",因为默认生成Servlet时,在web.xml的servlet-mapping项中均是这种形式。
Java中动态获取项目根目录的绝对路径的更多相关文章
- SpringMVC中Freemarker获取项目根目录
https://blog.csdn.net/whatlookingfor/article/details/51538995 在SpringMVC框架中使用Freemarker试图时,要获取根路径的方式 ...
- servlet中获得tomcat项目根目录的绝对路径
public class CreateXmlAction extends HttpServlet { private ServletConfig config; public void init(Se ...
- java 获取项目根目录
代码入下: request.getSession().getServletContext().getRealPath(); 这里的getRealPath()括号里面可以输入你想得到的具体目录. 需要注 ...
- Weblogic部署web项目获取项目根目录为null
写在前面 图片上传功能, web项目部署在本地Tomcat上并没有问题, 但是打成war包部署到Linux服务器Weblogic下却出现如题问题, 导致图片上传失败. 问题代码 String real ...
- java中动态反射
java中动态反射能达到的效果和python的语法糖很像,能够截获方法的实现,在真实方法调用之前和之后进行修改,甚至能够用自己的实现进行特别的替代,也可以用其实现面向切片的部分功能.动态代理可以方便实 ...
- JAVA中如何获取变量的类型
JAVA中如何获取变量的类型? package xiya; public class Demo { public static void main(String[] args) { String ty ...
- Java获取项目根目录等其他系统属性
一 相对路径的获得 说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目) String relativelyPath=System.getProper ...
- JS动态获取项目名以及获取URL地址中的参数
在项目当中我们可能会遇到例如改变的项目名称之后,相对应的地址就需要改变,为了减少工作量,将地址当中的项目名这一块写成动态获取的,那么最关键一点就是我要先获取它,再进行操作: 知识点整理,话不多说,直接 ...
- 在Java中动态传参调用Python脚本
最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...
随机推荐
- BIOS、BootLoader、uboot对比
BIOS BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统".其实,它是一组固化到计算机内 ...
- while循环以及格式化输出总结
while循环: while 无限循环 count = 1 sum = 0 while True: sum = sum + count count = count + 1 if count == 10 ...
- python学习 面向对象高级编程
---恢复内容开始--- 面向对象编程---oop,是一种编程思想,oop把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数 ...
- 读书笔记 C#事件event浅析(一)
在C#中,所谓event事件,就是一种特殊的委托.如果要声明事件,首先就要声明一个相对应的委托类型.按照流程来说,事件相当于委托类型往上升了一级似的,我是这样认为的. //1.先声明委托类型 publ ...
- Java多线程习题 ===重点 ,错题积累
多线程重点,错题分析 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: . 12: 13: 14: 15:
- Linux文件系统命令 cd
命令名:cd 功能:切换到某一个目录,后面可以跟相对路径和绝对路径. eg:cd /etc/ 表示的是进入到/etc/目录下 另外几个比较特俗的用法: cd - 切换到当前目录 cd ./ 还是当前路 ...
- centos/7下安装mysql5.7
本文参考自:https://blog.csdn.net/fanshujuntuan/article/details/78077433 背景:在ubuntu下用vagrant搭建了一个集群环境, 每个虚 ...
- Python 基础day3
1.简述bit,byte,kb,MB,GB,TB的关系 1TB=1024GB; 1GB=1024MB ; 1MB=1024kb: 1kb=1024byte ; 1byte=8bit 2.简述as ...
- js继承中,原型属性的继承探究
最近研究了js的继承,看了幻天芒的文章http://www.cnblogs.com/humin/p/4556820.html#3947420,明白了最好是使用apply或call方法来实现继承. 已知 ...
- python文件和文件流操作
f = open(r'C:\Users\wangxue2\Desktop\somefile.txt', 'w') #r'C:\Users\wangxue2\Desktop\somefile.txt'中 ...