java class 绝对路径_深入解析Java绝对路径与相对路径

1. 什么是绝对路径?什么是相对路径?

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

举例:

test.txt文件的绝对路径为:D:\documents\develop\test.txt

https://www.oracle.com/index.html代表了一个URL绝对路径

复制代码

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

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

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

举例:

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

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

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

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

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

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

复制代码

2. 路径的分类

b290d41e1ea43afee309ba49f40be2a3.png

3251cab4ab7ff0f0894daab850e2188a.png

3. 路径的区别和操作API

3.1 Java Class的相对路径

相对于classpath的相对路径

classpath: 就是项目中存放.class文件的路径。

举例:

Eclipse项目中classpath为:D:\eclipse32\workspace\java-demo\bin,相对于classpath的相对路径,就是相对于D:\eclipse32\workspace\java-demo\bin的相对路径。

(URL形式表示为:file:/D:/eclipse32/workspace/java-demo/bin/)

IntelliJ IDEA项目中classpath为:D:\ideaProjectDemo\java-demo\target\classes,相对于classpath的相对路径,就是相对D:\ideaProjectDemo\java-demo\target\classes的相对路径。

(URL形式表示为:file:/D:/ideaProjectDemo/java-demo/target/classes/)

复制代码

相对于当前用户目录的相对路径

当前用户目录:即Java虚拟机的调用目录,即System.getProperty("user.dir")返回的路径。

对于一般项目,就是项目的根目录,例如:java-demo项目的项目根目录为:D:\ideaProjectDemo\java-demo。

对于JavaEE服务器,可能是服务器的某个路径,这个没有统一的规范,例如:在Tomcat中运行Web应用,那“当前用户目录”是:%Tomcat_Home%/bin(即System.gerProperty("user.dir")输出%Tomcat_Home%/bin),即D:\Program Files\tomcat-5.0.28\bin,由此可以看出Tomcat服务器是在bin目录下启动JVM的(其实是在bin目录下的“catalina.bat”文件中启动JVM的)。

说明:

默认情况下,java.io包中的类总是根据“当前用户目录”来分析相对路径名,此目录由系统属性user.dir指定,通常是Java虚拟机的调用目录。

也就是说:在使用java.io包中的类时,最好不要使用相对路径。(在J2EE程序中会出问题,这个路径在不同的服务器中都是不同的)

所以,不要使用相对于“当前用户目录”的相对路径。

3.2 Web应用程序相对路径

服务器端相对地址

服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的。也就是说在jsp和servlet中的相对地址是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。

举例:

1.servlet中:

request.getRequestDispatcher("/user/index.jsp"),这个"/user/index.jsp"是相对于当前web应用的webapp目录的,

其绝对地址就是:http://192.168.0.1/webapp/user/index.jsp

2.jsp中:

其绝对地址是:http://192.168.0.1/webapp/user/a.jsp

复制代码

客户端相对地址

所有的HTML页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,而不是相对于服务器根目录下Web应用目录(http://192.168.0.1/webapp/)的。

举例:

HTML中form表单的action属性的地址是相对于服务器根目录(http://192.168.0.1)的,

所以提交到index.jsp为:action="/webapp/user/index.jsp"或action="/user/a.jsp";

说明:

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

注意:

应该尽量避免使用".","./","../../"等类似的相对该文件位置的相对路径,否则当文件移动时,很容易出现问题。

"./"代表当前目录

"../"代表上级目录

"../../"代表上级目录的上级目录

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值