最近的项目涉及了文件上传的功能,不可避免的需要获得文件路径的方法。
下面是关于获取文件路径的一些方法。
对于获取文件路径,在Jsp,Servlet,Java中,有不同的方法。
在java类中:
- 获取当前的classpath的绝对URI路径
this.getClass().getClassLoader().getResource(“/”).getPath()
this.getClass().getClassLoader().getResource(“”).getPath() - 获取当前类的加载目录,如果有“/”,获取当前类的所在工程路径
this.getClass().getResource(“”).getPath()
this.getClass().getResource(“/”).getPath() - 项目的绝对路径
this.getClass().getClassLoader().getResource(“.”).getPath(); - 另一种获取当前的classpath的绝对uri路径的方法
Thread.currentThread().getContextClassLoader().getResource(“/”).getPath()
Thread.currentThread().getContextClassLoader().getResource(“”).getPath() - 项目的绝对路径
Thread.currentThread().getContextClassLoader().getResource(“.”).getPath() - 获取项目的路径
directory.getCanonicalPath() - 获取文件的路径
ActionForm.getMyFile() - 获取系统的路径
System.getProperty(“”)
注意:如果一个类是通过bootstrap 载入的,那我们通过这个类去获得classloader的话,有些jdk的实现是会返回一个null的。
比如说我用new Object().getClass().getClassLoader()的话,会返回一个null,这样的话上面的代码就会出现NullPointer异常.所以保险起见我们最好还是使用我们自己写的类来获取classloader(”this.getClass().getClassLoader()“),这样一来就不会有问题。
在jsp中:
- 获取包含工程名的当前页面全路径
request.getRequestURI() - 获取站点的虚拟路径
request.getContextPath() - 获取当前页面所在目录下全名称
request.getServletPath() - 获取页面所在服务器的全路径
application.getRealPath(“页面.jsp”) - 得到页面所在服务器的绝对路径
java.io.File(application.getRealPath(request.getRequestURI())).getParent();
在servlet中:
- 得到工程目录(参数具体到包名)
request.getSession().getServletContext().getRealPath(“”) - 得到IE地址栏地址
request.getRequestURL() - 得到相对地址
request.getRequestURI() - 获取站点的绝对路径
request.getServletContext().getRealPath(“/”)
request.getRealPath(“/”)
注意:在Web应用程序中,我们一般通过ServletContext.getRealPath(”/”)方法得到Web应用程序的根目录的绝对路径。还有request.getContextPath(); 在Weblogic中要用request.getServletContext().getContextPath();但如果打包成war部署到Weblogic服务器,项目内部并没有文件结构的概念,用这种方式是始终得到null,获取不到路径,目前还没有找到具体的解决方案。
相关问题
绝对路径和相对路径
绝对路径:主页上的文件或目录在硬盘上真正的路径,URL和物理路径。
相对路径:相对与某个基 准目录的路径。包含Web的相对路径(HTML中的相对目录)。 服务器端的地址服务器端的相对地址指的是相对于web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对 地址,他们是由客户端浏览器解析的)。
注意:一般在编程中,一般都操作读取文件的相对路径,因为绝对路径虽然是比较好处理的,但是不灵活,所以我们在编程中对文件进行操作的时候,一般都是读取文件的相对路径,
类加载器
一般类加载器有系统的和用户自己定义的;系统的ClassLoader就是jdk提供的,他的路径就是jdk下的路径,或者在 jsp编程,比如Tomcat ,取得的类加载器的位置就是tomcat自己设计的加载器的路径,
版权所有,未经授权不得转载。