tomcat7.0
jdk1.8
在web工程中,有时我们需要获取当前项目的位置,有以下几种方式来获取:
1.纯servlet的情况:
// 结果为:E:\work\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\ request.getServletContext().getRealPath("/"); // 下述方法也可以获取,但是已经不推荐使用 // 因为最终调用的是javax.servlet.ServletRequest中的getRealPath方法,该方法已经Deprecated // 结果为:E:\work\workspace\AdminWeb\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\ request.getRealPath("/");
2.Struts2的Action中
// 在Action中, // 结果为:E:\work\workspace\AdminWeb\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\ ActionContext ac = ActionContext.getContext(); ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT); String b = sc.getRealPath("/"); // 下述方法也可以获取,但是已经不推荐使用 // 因为最终调用的是javax.servlet.ServletRequest中的getRealPath方法,该方法已经Deprecated // 结果为:E:\work\workspace\AdminWeb\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\toolweb\ String temp = ServletActionContext.getRequest().getRealPath("/");
3.利用System.getProperty()函数获取当前路径:
注意:该方法获取的路径经常不合心意。
在eclipse中tomcat启动时,拿到的是eclipse的安装目录。
在eclipse的java工程(非web工程)时,获取的当前工程的目录。
// java工程(非web工程)中,结果为:E:\work\workspace\AdminWeb\toolweb // tomcat工程(web工程)中,结果为:E:\tools\eclipse4_4_x64 System.out.println(System.getProperty("user.dir"));
4.1.利用class的getResource(“/”)或getLocation()获取当前路径(class情况):
// 结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/classes/com/simple/util/FileUtil.class String path = FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath(); System.out.println(path); // 结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/classes/ String retStr = FileUtil.class.getResource("/").getPath(); System.out.println(retStr);
4.2.利用class的getResource(“/”)或getLocation()获取当前路径(jar包的情况):
// windows下结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/lib/file.jar // Linux下结果为:/home/prop/桌面/tool/tomcat/apache-tomcat-7.0.55/webapps/toolweb/WEB-INF/lib/file.jar String path = FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath(); System.out.println(path); // windows下结果为:/E:/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/toolweb/WEB-INF/classes/ // Linux下结果为:/home/prop/桌面/tool/tomcat/apache-tomcat-7.0.55/webapps/toolweb/WEB-INF/classes/ String retStr = FileUtil.class.getResource("/").getPath(); System.out.println(retStr);
6.客户端程序获取当前路径:
最好是使用脚本来启动客户端程序。
在脚本中将工程目录设置到环境变量中,然后启动java程序。
在java程序中,通过获取环境变量的方式,拿到当前的工程目录。
例如:
在windows bat脚本中将【当前目录】设置给环境变量【BAT_HOME】,之后在java程序中获取
rem 定位到脚本目录 set BAT_HOME=%~dp0 java A
public class A { public static void main(String[] args) { // TODO Auto-generated method stub String currFolder = System.getenv("BAT_HOME"); System.out.println("当前目录为:" + currFolder); } }