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

栏目: Java · 发布时间: 6年前

内容简介:绝对路径:也可称完整路径,是指向文件系统中某个固定位置的路径,不会因当前的工作目录而产生变化。为做到这点,它必须包括根目录。相对路径:则是以指定的工作目录作为基点,避开提供完整的绝对路径。文件名称就可以被视为指定工作目录为基点的一个相对路径(虽然一般不将其称之为路径)。来自维基百科:

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

举例:
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的路径是一致的。
复制代码

来自维基百科: zh.wikipedia.org/wiki/路径_(计算…

2. 路径的分类

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

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程序中会出问题,这个路径在不同的服务器中都是不同的)

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大演算

大演算

佩德羅.多明戈斯 / 張正苓,胡玉城 / 三采 / 2016-8-1 / 620

揭開大數據、人工智慧、機器學習的祕密, 打造人類文明史上最強大的科技——終極演算法! 有一個終極演算法,可以解開宇宙所有的祕密, 現在大家都在競爭,誰能最先解開它! .機器學習是什麼?大演算又是什麼? .大演算如何運作與發展,機器可以預測什麼? .我們可以信任機器學過的東西嗎? .商業、政治為什麼要擁抱機器學習? .不只商業與政治,醫學與科學界也亟需......一起来看看 《大演算》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具