图片 2

深入解析Java绝对路径与相对路径

Posted by

绝对路径:也可称完整路径,是指向文件系统中某个固定位置的路径,不会因当前的工作目录而产生变化。为做到这点,它必须包括根目录。

 JAVA文件中获取路径及WEB应用程序获取路径方法

小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243
这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料!

1. 基本概念的理解

举例:

`绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL、物理路径

test.txt文件的绝对路径为:D:documentsdevelopest.txt

例如:

c:/xyz/test.txt代表了test.txt文件的绝对路径;

复制代码

也代表了一个URL绝对路径;

相对路径:则是以指定的工作目录作为基点,避开提供完整的绝对路径。文件名称就可以被视为指定工作目录为基点的一个相对路径(虽然一般不将其称之为路径)。

`相对路径`:相对与某个基准目录的路径,包含Web的相对路径(HTML中的相对目录)。

Java中加载文件时使用的相对路径,究竟是相对于什么路径呢?

例如:

据java
doc上说明,Java使用的相对路径,就是相对于“当前用户目录”,即“Java虚拟机的调用目录”,更白话就是:我们在哪里调用了JVM的路径。

在Servlet中,”/”代表Web应用的根目录,和物理路径的相对表示。

举例:

例如:

D盘根目录下有一java源文件Test.java,如:D:Test.java

“./”代表当前目录,”../”代表上级目录。这种类似的表示,也是属于相对路径。

该Test.java文件不含package信息,在命令行窗口编译此文件(执行命令:javac
Test.java),则会在D盘自动生成Test.class文件。

2. 关于JSP/Servlet中的相对路径和绝对路径。

然后在命令行窗口执行该程序(执行命令:java
Test),此时已启动一个JVM,这个JVM是在D盘根目录下被启动的,则JVM所加载程序中File类的相对路径就是相对D盘根目录的,即
D:

2.1 服务器端的地址

`服务器端的相对地址`:指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于的。

其用到的地方有:

`forward:servlet中的request.getRequestDispatcher(address);`这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:

`request.getRequestDispatcher(“/user/a.jsp”)`这个/相对于当前的web应用webapp,其绝对地址就是:。

“当前用户目录”,即Java虚拟机的调用目录,也是:D:

2.2 客户端的地址

`所有的html页面中的相对地址`都是相对于服务器根目录()的,而不是(根目录下的该Web应用的目录)的。

`Html中的form表单的action属性的地址`应该是相对于服务器根目录()的,所以,如果提交到a.jsp为:action=”/webapp/user/a.jsp”或action=”/user/a.jsp”,提交到servlet为action=”/webapp/handleservlet”。

Javascript也是在客户端解析的,所以其相对路径和form表单一样。

因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript,Action等属性前面最好都加上webapp应用名称,以确保所引用的文件都属于Web应用中的目录。

另外,应该尽量避免使用类似”.”,”./”,”../../”等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。

System.getProperty(“user.dir”)中系统变量”user.dir”存放的也是 D:

3. JSP/Servlet中获得当前应用的相对路径和绝对路径

说明:把Test.class移动到不同路径下,执行java
Test命令启动JVM,发现“当前用户目录”是不断变化的,始终和在哪启动JVM的路径是一致的。

3.1 JSP中获得当前应用的相对路径和绝对路径

根目录所对应的绝对路径:`request.getRequestURI();`

文件的绝对路径:`application.getRealPath(request.getRequestURI());`

当前web应用的绝对路径:`application.getRealPath(“/”);`

取得请求文件的上层目录:`newFile(application.getRealPath(request.getRequestURI())).getParent();`

复制代码

3.2 Servlet中获得当前应用的相对路径和绝对路径

根目录所对应的绝对路径:`request.getServletPath();`

文件的绝对路径:`request.getSession().getServletContext().getRealPath();`

当前web应用的绝对路径:`servletConfig.getServletContext().getRealPath(“/”);`

ServletContext对象获得几种方式:

 

javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()

2. 路径的分类

4. java的Class中获得相对路径,绝对路径的方法

图片 1图片 2

4.1 单独的Java类中获得绝对路径

根据java.io.File的Doc文挡,可知:`默认情况下newFile(“/”)代表的目录为:System.getProperty(“user.dir”);`。

以下程序获得执行类的当前路径:

package org.cheng.file; 
import java.io.File; 
public class FileTest{ 
    public static void main(String[]args)throws Exception{ 
        System.out.println(Thread.currentThread().getContextClassLoader().getResource("")); 
        System.out.println(FileTest.class.getClassLoader().getResource("")); 
        System.out.println(ClassLoader.getSystemResource("")); 
        System.out.println(FileTest.class.getResource("")); 
        System.out.println(FileTest.class.getResource("/"));//Class文件所在路径 
        System.out.println(newFile("/").getAbsolutePath()); 
        System.out.println(System.getProperty("user.dir")); 
    } 
}

 

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注