相对路径 订阅
相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。使用相对路径可以为我们带来非常多的便利。HTML绝对路径(absolute path)指带域名的文件的完整路径。 展开全文
相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。使用相对路径可以为我们带来非常多的便利。HTML绝对路径(absolute path)指带域名的文件的完整路径。
信息
外文名
Relative Path
类    型
HTML语言
中文名
相对路径
应    用
搜索引擎
相对路径绝对路径和相对路径
绝对路径:是从盘符开始的路径,形如相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入实际上,严格的相对路径写法应为.\system32\cmd.exe其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。假如当前路径为c:\program files要调用上述命令,则需要输入其中,..为父目录。当前路径如果为c:\program files\common files则需要输入另外,还有一种不包含盘符的特殊绝对路径,形如无论当前路径是什么,会自动地从当前盘的根目录开始查找指定的程序。
收起全文
精华内容
下载资源
问答
  • 2021-06-08 19:02:26

    之前,我们已经介绍了什么是绝对路径?绝对路径的具体写法和用法,今天,我们就一起来看看,有关相对路径的知识以及相对路径的具体写法和用法吧!

    什么是相对路径?

    相对路径是指以当前文件资源所在的目录为参照基础,链接到目标文件资源(或文件夹)的路径。

    假设,我们在一个A文件(比如a.html)中,链接另一个B文件(比如b.html),也可以说是,当前文件A引用目标文件B,那么,相对路径就是以当前文件A所在的目录为参照基础,建立连接到目标文件B的路径;

    改变当前文件A或目标文件B的目录,也就是说,把A或B放到不同的文件夹中,A和B的相对路径也会不同,所以,改变A或B的目录,它们之间的相对路径也会跟着发生变化!

    相对路径特殊符号

    在表示相对路径中,单点表示当前目录,双点表示上一级目录,反斜杠“/”表示分隔目录;

    相对路径特殊符号有以下几种表示意义:

    ◆以“./”开头,代表当前目录和文件目录在同一个目录里,“./”也可以省略不写!

    ◆以"../"开头:向上走一级,代表目标文件在当前文件所在的上一级目录;

    ◆以"../../"开头:向上走两级,代表父级的父级目录,也就是上上级目录,再说明白点,就是上一级目录的上一级目录

    ◆以"/”开头,代表根目录

    相对路径使用示例

    假设,我们有一个网页文件index.html和一个图片文件tupian.png,其中,以index.html文件为当前目录作为参照基础,图片tupian.png文件为目标文件,那么,他们之间的相对路径有以下几种写法:

    1、在同级目录里

    0f403c161848890d6d2cef83b69d1aca.png

    如上图所示,当前文件index.html和目标文件tupian.png都在D:/website/web/里,

    如果要在index.html文件中用相对路径引用tupian.png文件,其相对路径以"./"开头:./tupian.png  //表示在同级目录里

    也可以省略单点和反斜杠,也就是直接写目标文件的文件名tupian.png即可:tupian.png

    2、在上级目录或上上级目录里

    c38db0d6c5eb04e6da03473fb8ec617b.png

    如上图所示,目标文件tupian.png在当前文件index.html的上一级目录website里,在index.html文件中,用相对路径引用tupian.png文件,其相对路径以"../"开头,向上走一级,再找目标文件:../tupian.png  //表示在上级目录里

    而另一个目标文件img.png直接是在D盘根目录里,也就是在当前文件index.html上上级目录,即上一级目录的上一级目录,其相对路径以"../../"开头,向上走两级,再找目标文件:../../tupian.png  //表示在上上级目录里

    如果是上上上级目录,就向上走三级,用三个“../../../”,如有更多上级目录,则如此类推!

    3、在下级目录里

    70a3b18ad35bbaf83754d5dc0f6d3f05.png

    如上图所示,目标文件tupian.png在当前文件index.html的下一级目录abc文件夹里,在index.html文件中,用相对路径引用下级目录的tupian.png文件,其相对路径以"./"开头,先写同级目录文件夹名,再写目标文件的文件名:./abc/tupian.png  //表示在下级目录里

    4、在根目录里

    如果目标文件tupian.png在D盘符的根目录里,其绝对路径就是D:\tupian.png,用相对路径表示就是:/tupian.png   //用一个反斜杠表示在根目录里

    只要目标文件tupian.png在D盘的根目录下,无论当前文件index.html在D盘的什么位置都无关紧要,系统会自动地从当前D盘符的根目录开始查找tupian.png文件。

    以上是本地盘符根目录的表示方法,另一种是域名根目录的表示方法,其实,两者表示方法是一样的。

    比如,这个绝对路径:https://liudaima.com/tupian.png,它的相对路径也是:/tupian.png   //用一个反斜杠表示在根目录里

    相对路径优缺点

    1、优点:只要保持当前文件和目标文件的相对位置不变,它们之间的相对路径也不会改变,就算移动了整个目录,也可以保证相对路径是有效的!

    比如,只要保持当前文件index.html和目标文件tupian.png在同一个目录中,不管你把他们一起移动到哪个文件夹或目录,也不管是什么盘符(C盘、D盘、E盘等),只要它们同在一目录下,那么,在index.html文件中引用tupian.png的相对路径(./tupian.png)始终是有效的。但这也是容易被人采集或抄袭的原因。

    2、缺点:只要当前文件移动到其他不同的目录中,其相对路径也会随之发生变化,那么,之前未改变目录的相对路径也会失效;

    更多相关内容
  • 相对路径

    千次阅读 2019-12-08 17:44:41
    顾名思义,相对路径是相对于当前文件的路径。一般是较简短的,那么我们为什么不直接使用绝对路径,也就是文件存放的真实路径,例如:C:\Microsoft\test.txt。 为什么要用相对路径? 当我们把整个程序移动位置时,...
    相对/绝对路径
    顾名思义,相对路径是相对于当前文件的路径。一般是较简短的,那么我们为什么不直接使用绝对路径,也就是文件存放的真实路径,例如:C:\Microsoft\test.txt。

    为什么要用相对路径?

    • 当我们把整个程序移动位置时,其中的链接还是会指向正确的URL
    • 测试方法比较灵活,本机测试时比较方便

    那么绝对路径也有相对的优势:

    • 如果其中的部分网页改变位置,其中的链接还会指向正确的URL
    • 如果有人抄袭你的网站,里面的URL地址还是你的路径
    相对路径的使用
    • /

      根目录
    • ./

      代表当前目录,连写:././无意义
    • ../

      代表父级目录,连写:向上追溯两级目录
    • 只写文件名

      效果等同于./
    举个栗子

    栗子一
    ../举例
    这中情况下应该使用以下引用方式,因为img是js文件夹下的js文件的父级,需要使用父级目录。

    ../img//01.jpg

    栗子二

    在这里插入图片描述

    这种情况下,文件与img文件夹是同级,所以html文件访问img下的图片使用./即可。

    在这里插入图片描述

    "/"与"\"
    • 浏览器地址栏网址使用斜杠/

    • windows文件浏览器使用反斜杠\

    • 出现在html中的url是网络路径,必须用斜杠/

    展开全文
  • 9.1 Python 绝对路径与相对路径

    千次阅读 2022-03-28 22:54:10
    9.1 Python 绝对路径与相对路径 9.1.1 准备工作 第1步:对照下图,新建文件和文件夹: 1.在桌面新建文件夹,命名为file。 2.在file文件夹中新建2个文件夹,分别命名为a_file, b_file。 3.在file文件夹中新建1个txt...

    第九章 文件的读写操作

    9.1 Python 绝对路径与相对路径

    9.1.1 准备工作

    第1步:对照下图,新建文件和文件夹:

    在这里插入图片描述

    1.在桌面新建文件夹,命名为file。
    2.在file文件夹中新建2个文件夹,分别命名为a_file, b_file。
    3.在file文件夹中新建1个txt文件,命名为xxx.txt,在xxx.txt 文件中写入“好好学习,天天向上!!!”。
    4.在a_file文件夹中新建1个txt文件,命名为aaa.txt,在aaa.txt 文件中写入“恭喜你,文件读取成功!!!”。
    5.在b_file文件夹中新建c_file文件夹,在c_file文件夹新建一个ccc.txt文档,在文档中写入“今天星期六!!!”。
    6.在b_file文件夹中新建1个txt文件,命名为bbb.txt,在bbb.txt 文件中写入“今天下雨了!!!”。
    7.在b_file文件夹中新建1个b.py文件。

    第2步:用vscode打开b_file文件夹。

    注意
    用相对路径只能打开b_file文件夹,否则后面的代码会报错!!!
    但是用绝对路径打开文件时,可以不限制打开的文件夹。

    9.1.2 绝对路径

    1.什么是绝对路径

    在Python读取文件时,我们首先需要知道文件的路径,即存储位置。
    就像人工手动打开文件一样,首先你要知道文件存储在c盘或d盘的具体位置。

    Python的文档路径有两种表述方式:
    第1种是绝对路径:就是从盘符(c盘、d盘)开始一直到文件所在的具体位置。
    绝对路径就是文件或文件夹在硬盘上的完整路径。
    在 Windows 系统中,绝对路径是以磁盘名称开头,如 C:或者 D: ,具体的文件或文件夹名称做结尾。
    例如:xxx.txt 文件的绝对路径为:
    "C:\Users\xiaoyuzhou\Desktop\file\xxx.txt"
    绝对路径是唯一的,只有一个。

    2.查看绝对路径的方法有2种

    方法1:点击文件上方的搜索栏;

    在这里插入图片描述

    方法2:鼠标点击文件xxx.txt,然后按住【shift】,再点击鼠标右键,最后点击【复制文件地址】。

    在这里插入图片描述

    3.用绝对路径打开文件
    首先打开b.py 文件,在b.py 文件中输入下面的代码。
    用绝对路径打开文件,可以不限制打开的文件夹。

    # 用绝对路径打开xxx.txt   
    txt = open (
    "C:\\Users\\xiaoyuzhou\\Desktop\\file\\xxx.txt", 
    encoding='utf-8') 
    print(txt.read())
    

    【终端输出】
    好好学习,天天向上!!!

    因为图片显示不全,所以代码里我有换行,大家编写时候不用换行。

    4.代码解析
    open 是一个Python的内置函数,作用是打开文件,函数里面有2个参数;
    第1参数是文件的绝对路径:C:\Users\xiaoyuzhou\Desktop\file\xxx.txt";
    第2参数是文件编码格式:encoding=‘utf-8’;

    read 也是一个Python的内置函数,作用是读取整个文件,并将读取到的文件内容存放到一个字符串变量中。
    open 函数后面会有详细的介绍,这里仅做了解。

    5.注意事项:改写绝对路径时加一个\

    xxx.txt 文件的的绝对路径原本为:
    “C:\Users\xiaoyuzhou\Desktop\file\xxx.txt”

    我在open 参数内的写的xxx.txt 文件的的绝对路径为:
    “C:\\Users\\xiaoyuzhou\\Desktop\\file\\xxx.txt”

    通过对比两个路径,发现我把绝对路径的单反斜杠统一写成了双反斜杠,然后放到参数中。
    为什么要写成双反斜杠呢?
    因为在Python中,有转义字符的语法,【\】+字母能实现特殊的功能。

    在这里插入图片描述

    上述代码中,如果不加双反斜杠,\f 就会被ptyhon当做转义符号处理,程序会报错,如下面的代码:

    # 使用单反斜杠,\f 被当做转义字符,程序报错 
    txt = open (
        "C:\Users\xiaoyuzhou\Desktop\file\xxx.txt" ,
        encoding='utf-8') 
    print(txt.read())
    

    【程序报错】

    SyntaxError: (unicode error) 'unicodeescape' codec 
    can't decode bytes in position 2-3: 
    truncated \UXXXXXXXX escape
    

    9.1.3 相对路径

    1. 什么是绝对路径
    “相对路径”就是针对“当前文件夹”这一参考对象,来描述文件路径的形式。
    相对路径使用..\\.\\表示。
    一个点.\\ 表示文件或文件夹所在的当前目录。
    两个点..\\表示当前目录的上一级目录。
    上n级就用n 个..\\表示。

    2. 任务1:在b.py里打开同一个文件夹里的文件:bbb.txt。

    首先用vscode 打开b_file文件夹。
    然后打开b.py文件。
    注意:用相对路径只能打开b_file文件夹,否则后面的代码会报错!!!

    人工操作:在b.py 文件下,要打开bbb.txt 文件:直接点击bbb.txt 文件即可。

    在这里插入图片描述

    大家观察上面的文件流程图,发现b.py 和bbb.txt 位置一样,即在同一文件夹里。
    绝对路径中一个点.\\ 表示文件或文件夹所在的当前目录。
    那么相对于b.py 而言,bbb.txt 的相对路径为:.\\bbb.txtbbb.txt
    因为.\\可以省略不写。
    注意路径参数必须有后缀名.txt。

    2.1同文件夹绝对路径省略点:bbb.txt

    # 在b.py里打开同文件夹文件:bbb.txt
    txt = open ('bbb.txt',encoding='utf-8')
    print(txt.read())
    

    【终端输出】

    今天下雨了!!!
    

    2.2同文件夹绝对路径不省略点:.\bbb.txt

    # 在b.py里打开同文件夹文件:bbb.txt
    txt = open ('.\\bbb.txt',encoding='utf-8')
    print(txt.read())
    

    【终端输出】

    今天下雨了!!!
    

    3. 任务2:在b.py里打开下一层次的文件:ccc.txt

    在这里插入图片描述

    大家观察上面的文件流程图,发现ccc.txt在b.py 的下一级目录里。
    和b.py同级的是c_file 文件夹。
    那么相对于b.py 而言,ccc.txt 的相对路径为:.\\c_file\\ccc.txtc_file\\ccc.txt
    .\\可以省略不写。
    注意路径参数必须有后缀名.txt。

    人工操作:现在打开的是b.py 文件,在打开b.py文件下,要打开 ccc.txt,首先打开c_file,然后打开ccc.txt 文档即可。(大家按照人工打开的方式操作就能理解)

    省略.\

    # 在b.py里打开下一层次的文件:ccc.txt。
    txt = open ('c_file\\ccc.txt',encoding='utf-8')
    print(txt.read())
    

    【终端输出】

    今天星期六!!!
    

    不省略.\

    # 在b.py里打开下一层次的文件:ccc.txt。
    txt = open ('.\\c_file\\ccc.txt',encoding='utf-8')
    print(txt.read())
    

    【终端输出】

    今天星期六!!!
    

    4. 任务3:在b.py里打开上一层次的文件:aaa.txt

    在这里插入图片描述

    大家观察上面的文件流程图,发现aaa.txt在b.py 的上一级目录里。
    两个点..\\表示当前目录的上一级目录。
    那么相对于b.py 而言,aaa.txt 的相对路径为:..\\a_file\\aaa.txt
    人工操作:现在打开的是b.py 文件,文件所在的目录是b_file 文件夹,要打开aaa.txt,往回退一步,找到a_file 文件夹,在点击aaa.txt 即可。
    文件夹往上走(后退)一次,就用1个..\\
    …\不能省略。

    # 任务3:在b.py里打开上1级的文件:aaa.txt。  
    txt = open ('..\\a_file\\aaa.txt',encoding='utf-8')
    print(txt.read())  
    

    【终端输出】

    恭喜你,文件读取成功!!!
    

    4. 任务4:在b.py里打开上2个层次的文件:描述文档.txt

    准备工作:
    在电脑桌面新建一个名为【Python笔记新】文件夹,里面新建【第9章 文件读写】文件夹,里面新建【文件路径】文件夹,里面新建【相对路径】文件夹,里面新建【描述方式.txt】文档,文档中输入内容“文件夹往上走几层就用几个…\ 。”

    描述方式.txt 文档绝对路径为:
    “C:\Users\xiaoyuzhou\Desktop\Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt”

    b.py 文件绝对路径为:
    “C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py”

    观察上述2个绝对路径,发现两个文档绝对路径有相同的部分,即都在C:\Users\xiaoyuzhou\Desktop下。

    人工操作:我们现在打开的是b.py 文件,b.py 文件所在的目录为b_file文件夹。要打开 描述方式.txt,首先我们往回退2次:
    第1次:回到file文件夹;
    第2第:退到Desktop。
    然后打开桌面的Python笔记新文件夹,依次往下打开文件,就能找到描述方式.txt 文档。

    操作中,我们往回退了2次,所以表述时需要用两个..\\
    ..\\是用来表示回退的次数。

    txt = open (
    '..\\..\\
    Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt',
    encoding='utf-8')
    print(txt.read())
    

    【终端输出】

    文件夹往上走几层就用几个..\\ 。  
    

    9.1.4 相对路径的写法

    相对路径一开始我也很难理解,后来查阅一些资料,也咨询了一些朋友,得出下面的结论,不一定准确,仅供大家参考。
    我个人理解的相对路径写法就是用..\\.\\代替2个文件绝对路径的共同部分。
    …\ 表是文件夹往上走。往上走几层,就用几个..\\
    .\ 表示文件是同层或者往下走。

    # b.py  xxx.txt 文件绝对路径如下  
    # "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
    # "C:\Users\xiaoyuzhou\Desktop\file\xxx.txt" 
    # xxx.txt在b.py的上级 
    txt = open ('..\\xxx.txt',encoding='utf-8')
    print(txt.read())  
    
    

    【终端输出】

    好好学习,天天向上!!!
    
    # b.py  aaa.txt 文件绝对路径如下  
    # "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
    # "C:\Users\xiaoyuzhou\Desktop\file\a_file\aaa.txt"
    # aaa.txt在b.py的上级 
    txt = open ('..\\a_file\\aaa.txt',encoding='utf-8')
    print(txt.read())  
    

    【终端输出】

    恭喜你,文件读取成功!!!
    
    # b.py  bbb.txt 文件绝对路径如下  
    # "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
    # "C:\Users\xiaoyuzhou\Desktop\file\b_file\bbb.txt"
    # bbb.txt和b.py同级
    txt = open ('bbb.txt',encoding='utf-8')
    print(txt.read())  
    

    【终端输出】

    今天下雨了!!!
    
    # b.py  ccc.txt 文件绝对路径  
    # "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
    # "C:\Users\xiaoyuzhou\Desktop\file\b_file\c_file\ccc.txt"
    # ccc.txt 在b.py的下一级
    txt = open ('c_file\\ccc.txt',encoding='utf-8')
    print(txt.read())  
    

    【终端输出】

    今天星期六!!!
    
    # b.py 描述方式.txt 文件绝对路径  
    # "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
    # "C:\Users\xiaoyuzhou\Desktop\Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt"
    # b.py往上走2层可以走到共同的Desktop
    txt = open (
    '..\\..\\Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt',encoding='utf-8')
    print(txt.read())
    

    【终端输出】

    文件夹往上走几层就用几个..\\ 。  
    

    9.1.5 相对路径的作用

    当我们要把代码共享个其他人的时候,如果代码里用的是绝对路径,大家的用户名通常不一样,就会导致路径不一样,大家拿到代码还需要修改路径才能正常运行。
    但连同文件一起拷贝,使用相对路径表述不用修改就可以正常运行。
    相对路径通常用于存储在一起的文档,如果两者跨层较大,还是选用绝对路径。

    9.1.6 总结

    在这里插入图片描述

    展开全文
  • 绝对路径、相对路径详解

    千次阅读 2019-08-12 23:15:35
    绝对路径、相对路径详解 1、一个项目运行路径 + 文件所在项目的路径 = 绝对路径! 2、文件在项目的路径 = 相对路径! 例如: 一个Maven工程目录: src ---- main --------- java -------------- ...

    一、概括

    在实际Java项目中,我们的成员可能使用IDE不一致,主要分 eclipse,IDEA两类,当开发阶段,其项目运行的相对路径可能会存在一些差异。

    1. 当pro环境,jar包形式,其配置文件路径恒定,不存在差异,只有项目的配置路径是否正确判断,若不对运行报错;
    2. 当dev环境,因为IDEA 与 Eclipse 打开项目文件树形结构不一致,造成项目运行的相对路径有差异!
    • IDEA 项目路径图如下: (父子组成树形结构)
      在这里插入图片描述
    • Eclipse 项目路径图如下: (父子项目是平行结构)
      在这里插入图片描述

    上述总结是工作时,发现头次用IDEA启动项目,log日志报错,原因就是application.yml 配置查找 logback.xml位置搞错所致,至此,有必要来说说绝对路径和相对路径。

    二、绝对路径、相对路径

    讨论路径,首先我们来看看Linux这个典型文件路径!

    2.1 Linux文件路径分析

    # 系统根目录
    [hawin@localhost ~]$ cd /
    [hawin@localhost /]$ 
    
    # 当前用户目录 
    [hawin@localhost /]$ cd ~
    [hawin@localhost ~]$ ll
    total 112664
    drwxrwxr-x 2 jht jht      4096 Jun 11 14:55 lincese
    drwxrwxr-x 8 jht jht      4096 Oct 16  2019 logs
    drwxrwxr-x 2 jht jht      4096 Oct 12  2019 pic
    drwxrwxr-x 4 jht jht      4096 Jun  2 14:34 projects
    
    # 1、从根目录 查看 当前用户下的 pic文件夹 
    [hawin@localhost /]$ cd /home/hawin/pic 
    # (/home/hawin/pic 就是一个绝对路径,外部访问可以根据此目录)
    
    # 2、从当前用户,查看当前用户下 pic/p001/p01.png
    [hawin@localhost ~]$ cd pic/p001 
    # (pic/p001 就是一个相对路径,外部无法直接访问此目录。注意不能“/”开头)
    
    # 3、额外说明:windows跟Linux类似,只不过没有 "/" 根目录的概念,
    # 是以磁盘 C,D,E等为根目录,并且不区分 反斜杠\, 斜杆/ ;
    D:\soft\eclipse>cd /
    D:\>
    # 若是eclipse下的pic/p001文件夹,其绝对路径: d:\soft\eclipse\pic\p001
    

    所以,绝对路径是以系统根目录为依据;相对路径则可能多样变化,主要依赖相对主目录属性。
    上述讨论的相对主目录即是当前用户目录:/home/hawin/;
    【so,容易得出:绝对路径 = 相对主目录 + 相对路径】;
    即 pic/p001/p01.png 的绝对路径 = /home/hawin/ + pic/p001/p01.png;

    了解了Linux文件路径,接下来再看一个Maven工程项目!

    2.2 Maven项目路径分析

    例如:一个Maven工程目录如下图
    在这里插入图片描述

    2.2.1、项目路径

    上图是以IDEA工具打开maven项目(eclipse类似注意前面讲的不一致即可),可以看出一个项目路径在顶部:E:\GitHub\JavaEE\study-code\log-sample-maven
    这个项目有个能独立运行的 module:client-privileges。

    那么当 client-privileges 在编码若访问 其对应 resource/aa.txt,该如何写文件路径? 参考下面代码

    @Test
    public void testFilePath()  {
         // 1. 使用绝对路径  d:/hawin/code/study-access/target/classes/a.txt
         // 2. 使用相对路径  target/classes/a.txt
         // 3. 使用 ClassLoader 直接定位:URL 即是绝对路径
         ClassLoader classLoader =ClassLoader.getSystemClassLoader();
         URL resource = classLoader.getResource("a.txt");
    //        resource = null;
    //        assert resource !=null;
         System.out.println("path = "+ resource.getPath()+",\n rel = "+ resource.getRef());
         try(FileInputStream fis = new FileInputStream(resource.getPath())){
             byte[] buf = new byte[1024];
             while ((fis.read(buf)) != -1){
                 System.out.println(new String(buf));
             }
         }catch (IOException e){
             e.printStackTrace();
         }
     }
    

    【结论】

    1. maven项目的绝对路径 = 项目路径(相对主目录) + 运行时target路径(相对路径);
    2. 上面3种路径定位资源,平时开发可能不会直接使用绝对路径,target路径。因为部署后绝对路径肯定不是当时开发是那个绝对路径;target相对路径也只是IDEA工具临时运行文件,部署后是jar,war包形式,也就没有这个target了。 所以,必定用到ClassLoader来动态定位资源;

    ==========================================================
    【注意】导入工程到IDEA目录不一样,项目路径也有不一致,如前面讲的 IDEA, Eclipse 差异差不多。以 E:\GitHub\JavaEE\study-code 为例:

    1. 以E:\GitHub\JavaEE\study-code打开项目,其本身为项目路径);
    2. 以module:client-privileges 打开项目,则E:\GitHub\JavaEE\study-code\client-privileges是项目路径)
    3. 当打成jar包放入 E:\ 下面:运行jar包时,E:\ 就是项目路径
    # jar 包运行下的 resource中 aa.txt
    # 1.绝对路径 
    absolutePath=file:/E:/zcode/client-privileges-1.0-SNAPSHOT.jar!/aa.txt
    # 2. 相对路径: jar包名称即相对点
    relativePath = client-privileges-1.0-SNAPSHOT.jar!/aa.txt
    

    二、如何精确查找到资源文件

    前面讲了绝对路径是会变的,一般不会根据绝对路径去定位资源文件。
    所以那一定是用相对路径来定位资源文件,那相对路径如何确认呢?

    2.1、本地资源文件

    对于一个在本地运行的软件,定位资源文件,很容易知道相对路径。
    若此时在代码写死相对路径,那就基本上玩完了,当环境改变肯定是找不到对应的资源。

    那要怎么样在代码里面灵活设置,定位到资源文件呢?
    有如下2种方式:(也可说是4种)

     URL resURL = TestDemo.class.getResource("/policy");
     String path1 = resURL.getPath();
     System.out.println("path1:"+path1);
     
     URI resUri = TestDemo.class.getResource("/policy").toURI();
     String path2 =  resUri.getPath();
     System.out.println("path2:"+path2);
     
     String path3 = Test.class.getClassLoader().getResource("policy").getPath();
     System.out.println("path3:"+path3);
     
     String path4 = Test.class.getClassLoader().getResource("policy").toURI().getPath();
    System.out.println("path4:"+path4);
    
    ===== console:  【注意】policy 文件夹要有信息,否则不会进入运行的target目录 ========
    path1:/E:/GitHub/JavaEE/study-code/log-sample-maven/client-privileges/target/classes/policy
    path2:/E:/GitHub/JavaEE/study-code/log-sample-maven/client-privileges/target/classes/policy
    path3:/E:/GitHub/JavaEE/study-code/log-sample-maven/client-privileges/target/classes/policy
    path4:/E:/GitHub/JavaEE/study-code/log-sample-maven/client-privileges/target/classes/policy
    

    上面 getResource( path). 这个path是相对 项目的资源文件根目录的一个路径。 这个路径在编码时,是非常好确认的!

    题外话:
    1、资源文件是不是只能是main的resources这个文件呢?答案是否定的!因为getResource方法是指项目资源文件一个集合,在IDEA只要指定为Resources Root都能被getResource直接定位到!
    2、平时开发时,resources目录被藏的太深,时常会在项目的最外层配置一个config文件目录设置为Resources Root!

    2.2、网络资源文件

    上面的4种方式获取资源文件,当打成jar运行时。会有如下结果:

    =============console:=================
    path1:file:/E:/zcode/client-privileges-1.0-SNAPSHOT-jar-with-dependencies.jar!/policy
    path2:null
    path3:file:/E:/zcode/client-privileges-1.0-SNAPSHOT-jar-with-dependencies.jar!/policy
    path4:null
    

    会发现toURI()方法后就变成null了! 这里就涉及 URL/URI 的区分!

    2.2.1、先来解释 两个名词:URI 、URL

    • URI : 统一资源标志符(Uniform Resource Identifier)
      –> 对任何抽象或物理资源进行完整标识的字符序列;

    • URL : 统一资源定位符(uniform resource location)
      –> 除了标识资源可用的位置之外,URI的一个子集描述了访问该资源的主要机制;

    2.2.2、URI 标准格式

    scheme:[// [user:password @] host [:port]] [/] path [?查询] [#片段]
    
    1、Scheme(方案):该方案列出了具体语法和URI的任何相关协议。方案不区分大小写,后跟冒号。理想情况下,URI方
    案应该在互联网号码分配机构(IANA)注册,但也可以使用非注册方案。
    
    2、权限组件:权限组件由多个部分组成:可选的身份验证部分,主机(由注册名称或IP地址组成) , 以及可选的端口号。
    身份验证部分包含用户名和密码,用冒号分隔,后跟at(@)符号。在@之后是主机名,然后是冒号,然后是一个端口号。
    请务必注意,IPv4地址必须采用点十进制表示法,并且IPv6地址必须括在括号中。
    
    3、查询(可选):查询包含一串非分层数据。虽然语法没有明确定义,但通常是由分隔符分隔的属性值对序列,例如&符
    号或分号。查询通过问号与前一部分分开。
    
    4、片段(可选):片段包含片段标识符,该标识符为辅助资源提供方向。
    

    2.2.3、URI 与 URL 区别

    URL是统一资源定位器,用于标识资源;URI(统一资源标识符)提供了更简单和可扩展的标识资源的方法。URL是URI的子集,下面我们就来看看一下URL和URI的主要区别是什么。

    1、作用的区别

    URL(统一资源定位符)主要用于链接网页,网页组件或网页上的程序,借助访问方法(http,ftp,mailto等协议)来检索位置资源。

    URI(统一资源标识符)用于定义项目的标识,此处单词标识符表示无论使用的方法是什么(URL或URN),都要将一个资源与其他资源区分开来。

    2、可以说URL是URI(URL是URI的子集),但URI永远不能是URL。

    3、协议区别: URL指定要使用的协议类型,而URI不涉及协议规范。

    说白了,URI与URL都是定位资源位置的,就是表示这个资源的位置信息,就像经纬度一样可以表示你在世界的哪个角落。URI是一种宽泛的含义更广的定义,而URL则是URI的一个子集,就是说URL是URI的一部分。但是、不是每个URI都是URL的(一般情况下是一致的!);

    还有在java.net.URI你只能看到他的一些属性,他只是表示一个位置,但是你没有办法通过URI获取到这个对象的流,但是URL就不同了。java.net.URL该类提供方法(openConnection()),通过该方法我们可以通过IO流操作他。但是URI中我貌似没看到相关的方法。【URL是可以直接操作的,但是URI并不行】
    (通常URL,我们看作成:浏览器的网址!)

    # URI 非URL. 无法通过下面定位到资源。
    # 其实际是这个是一本书的isbn,可以唯一标识这本书,更确切说这个是URN。
    urn:isbn:0-486-27557-4
    
    # URI 非URL :只是标记邮件到某某邮箱,并不能找到什么资源
    mailto:cay@horstman.com
    
    # URI 又是 URL, 能通过下面的定位标记,找到改资源!
    https://www.zhihu.com/question/21950864
    

    【扩展】
    URI = Universal Resource Identifier 统一资源标志符
    URL = Universal Resource Locator 统一资源定位符
    URN = Universal Resource Name 统一资源名称

    前面提到一个问题:
    url.toURI.getPath() null ; —> 这个 decode(path) 返回一个null. 也就是说jar包运行,uri.getPath有风险。尽管会转码,但还是不建议使用。 至于 why? 没去深入查原因了,有谁知晓,发我哈,感激不尽!
    url.getPath() 不是null; —> 直接返回了 path。

    2.3、网络资源文件定位

    认知URL、URI. 知晓都是用来定位资源文件的! 并且可以本地、网络资源文件都可以定位。
    那么网络资源文件具体定位如何,参考如下:

    //购物车服务层
    app.service('cartService',function($http){
    	//购物车列表
    	this.findCartList=function(){
    		return $http.get('cart/findCartList.do');
    	}
    	
    	//添加商品到购物车
    	this.addGoodsToCartList=function(itemId,num){
    		return $http.get('cart/addGoodsToCartList.do?itemId='+itemId+'&num='+num);
    	}
    }
    
    <a href="${pageContext.request.contextPath}/myServlet"> 去找我!
    </a>
    <form action="userServlet" method="post">
      姓名:\<input id="username" name="username" type="text">
      密码:\<input id="password" name="password" type="text">
      <input type="submit" name="提交">
    </form>
    

    经过分析,一般情况都是使用 URL的相对路径来定位的! 当然也可以使用全路径来定位,如jsp中 ${pageContext.request.contextPath}/myServlet; 而下面的form就是一个相对路径了!

    至于URL 前面部分:scheme:[// [user:password @] host [:port]] ,整个工程部署时会灵活配置即可!

    2.4、URL编码

    当平时我们是使用一些级别比较低的浏览器,会发现 一些URL中有 (%E4%F6%B2…)这种形式的信息,其实就是中文。在数据传递,资源定位时,中文是不友好的。一般需要转码,这里就是转成URL编码格式。【现在高级别的浏览器已做优化显示处理,但是实际传递还是URL编码格式!】

    public static void main(String[] args) throws IOException, URISyntaxException {
     	String p = "深圳太阳红";
         String encode = URLEncoder.encode(p, "utf-8");
         System.out.println(encode);
         byte[] bytes = "深圳太阳红".getBytes();
         ArrayList<String> list = new ArrayList<>();
         for(byte b:bytes){
             list.add(Integer.toHexString(b));
         }
         System.out.println(Arrays.toString(bytes));
         System.out.println(list);
     }
     ================================
    // %E6%B7%B1 %E5%9C%B3 %E5%A4%AA %E9%98%B3 %E7%BA%A2
    // [-26, -73, -79, -27, -100, -77, -27, -92, -86, -23, -104, -77, -25, -70, -94]
    // [ffffffe6, ffffffb7, ffffffb1, ffffffe5, ffffff9c, ffffffb3, ffffffe5, ffffffa4, ffffffaa, ffffffe9, ffffff98, ffffffb3, ffffffe7, ffffffba, ffffffa2]
    

    结论:1、URL编码实际是 “汉字的十六制编码取后2位,其余位用%号取代”
    2、平时我们讲中文占用2个字节,但是到utf-8格式,中文占用3个字节!

    三、路径的标识法

    1、"." – 表示当前目录,相对路径。

    D:\apache-tomcat\bin>  ./startup.bat  (x)
    D:\apache-tomcat\bin>  startup.bat  (v)
    ⇒ windows dos下 当前路径已经明确。 ‘.’ 将无效,外部命令;
    【'.'在windows下不能被当做首选命令字段,但是还是表示当前目录。 
    如  D:\apache-tomcat\bin>  cd .    目录不变!】
    
    [root@localhost bin]# startup.sh (x)
    [root@localhost bin]# ./startup.sh (v)
    ⇒  linux下,使用标准的 '.' 表示当前目录;
    

    总结:
    1、当linux在运行命令时,必须带上 ./ 才能找当前目录下的命令;而windows则反之;
    2、./ 当前放在最前面,一般都省略。如下:等效!
    <img src='img/me.png'></img>
    <img src='./img/me.png'>

    3.2、"…" ---- 代表上一层目录,相对路径。
    简单!如

     1)  cd .. : 回退到上一级目录`
     2)  <img src = '../../my.png'> 返回带上上级目录查找 my.png
    

    3.3、"…/…/" ---- 上一层目录的上一层目录,相对路径。
    同上!

    3.4、"/" – 根目录,绝对路径。

    1)  Linux:  
    [root@localhost bin]#  cd / ==> 直接退到根目录下;
    
    2) windows:
    D:\apache-tomcat\bin> cd /  ==> 只是退到当前磁盘根路径  `D:\`
    
    3) spring: 
    @Service('/user/login)' 这个第1斜杠,代表根目录吗?
    # spring 前面的第1斜杆,有无都可以,会自动识别
    
    4)  html:
    <img src = '/img/me.png' /> 这种写法是否合理?
    # 不合理,若是当前目录下img: 不要/, 或使用 ./ ; 
    # 若是其他,先确定项目路径,然后确认文件html 与 被调用的文件的相对路径;
    

    3.5、“D:/New folder/” – 物理路径,绝对路径。
    简单,略!

    展开全文
  • 这个方法的路径到底在那里取决于调用java命令的起始位置定义在哪里,tomcat/bin下面的catalina.bat调用了java,所以在tomcat下相对起始位置是tomcat/bin,但是eclipse启动时,起始位置 是eclipse的项目路径。...
  • Java相对路径读取文件

    千次阅读 2021-02-12 15:19:51
    } /** * 通过工程相对路径读取(包内)文件,注意不以“/”开头 */ public static void readTextA_ByProjectRelativePath() { System.out.println("-----------------readTextA_ByProjectRelativePath----------...
  • 因为配置文件通常都是在项目中的,因此,我们在编码的时候就需要使用到文件的相对路径; 而相对路径到底该如何理解呢? 本文将对此概念进行详细的描述。 2.相对路径的理解 相对路径 : 通俗的理解,我们在一个java...
  • python文件读取&导包的绝对路径、相对路径

    千次阅读 多人点赞 2022-04-24 14:02:00
    本文主要讲述了文件读取的绝对路径和相对路径;导包的绝对路径和相对路径,以及当前工作路径和绝对路径的区别(`os.getcwd(),os.pah.abspath(__file__)`)
  • 相对路径和绝对路径的区别在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。1.绝对路径绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\...
  • 相对路径:相对于自己的目标文件位置。例如“1.htm”文件所在目录为“C:\Users\15063\Desktop\lqf”,而“1.txt”文件所在目录为“C:\Users\15063\Desktop”,那么“1.txt”相对于“1.htm”文件来说,是在
  • 文件的绝对路径与相对路径

    千次阅读 2021-01-17 17:07:15
    就此整理一下文件的绝对路径与相对路径的区别。1.绝对路径先说在本地计算机上,文件的绝对路径当然是指:文件在硬盘上真正存在的路径。例如这个路径:D:/wamp/www/img/icon.jpg告诉我们icon.jpg文件是在D盘的wamp...
  • 在JAVA文件中获取该项目的相对路径

    千次阅读 2021-02-26 10:09:23
    1.基本概念的理解绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,...相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的跟目录。...
  • 绝对路径、相对路径、根路径

    千次阅读 2020-12-21 20:22:02
    今天探讨一下浏览器和服务器中的绝对路径、相对路径和根路径 浏览器中 对于浏览器而言,是无法知道服务器中,文件目录路径的。因为浏览器获取的文件资源,很可能跟服务器中文件资源目录不对应。而服务器是知道每个...
  • java相对路径的写法

    千次阅读 2021-03-16 11:53:30
    正确写法:使用“../img/photo.jpg”的相对路径来定位文件 例2: ...可编辑 Java 文件的路径、绝对路径和规范路径示例说明 java.io.File 提供了三个方法来获取文件的路径不同写法,这三个方法分别是 getPath()、 ...
  • SpringBoot获取项目文件的绝对路径和相对路径
  • Dreamweaver绝对路径和相对路径

    千次阅读 2021-01-17 17:07:15
    在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。1.绝对路径绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book网页布局代码第2章”目录...
  • 1.基本概念的理解绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,...相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的跟目录。...
  • Python绝对路径和相对路径详解

    千次阅读 2020-11-20 18:13:42
    在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。什么是当前工作目录每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录...
  • 相对路径和绝对路径详解

    千次阅读 2020-07-10 17:18:21
    相对路径 例子 绝对路径 例子 给客户端浏览器使用 给服务器使用 相对路径 不以斜杠/开头。以点.开头的路径。比如 ./:当前目录 ../:后退以及目录 既不以/开头,也不以./开头的路径,默认为./开头,...
  • Java中的绝对路径和相对路径

    千次阅读 2021-10-28 10:10:16
    绝对路径和相对路径: 绝对路径: 绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。 相对路径: 在IDEA环境中写的是一个相对路径,绝对位置是工程目录。相对路径名必须使用取自其他路径名的...
  • Linux绝对路径和相对路径详解

    千次阅读 2021-03-03 16:09:16
    在Linux中简单的理解一个文件的路径,指的就是该...指明一个文件存放的位置,有2种方法,分别是使用绝对路径和相对路径。我们知道,Linux系统中所有的文件(目录)都被组织成以根目录“/”开始的倒置的树状结构,如图...
  • QT绝对路径和相对路径小结

    千次阅读 2021-02-11 07:32:39
    首先需要弄清楚两个概念:绝对路径与相对路径绝对路径: 文件在硬盘上真正存在的路径。例如“text.jpg”这个图片是存放在硬盘的“E:\book\目录下,那么 “text.jpg”这个图片的绝对路径就是“E:\book\text.jpg"相对...
  • linux绝对路径和相对路径

    千次阅读 2022-01-27 22:46:55
    2. 相对路径 从当前目录算起的路径叫做相对路径 例如: ./test/hello …/static/images 3. 绝对路径和相对路径的使用 使用绝对路径切换到桌面 cd /home/python/Desktop 在下载目录以相对路径切换到桌面 cd Downloads ...
  • 超链接中的绝对路径和相对路径

    千次阅读 2021-06-10 04:31:49
    超链接中绝对路径和相对路径的区别一般word的超链接都是绝对路径,当链接的目标文件和文档移致不同分区时文档相对路径: 文档相对路径是用于本地链接的最合适的路径。在当前文档与链接的文档在同一文件夹中时,文档...
  • 1.基本概念的理解绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,...相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的跟目录。...
  • C++相对路径和绝对路径(示例代码)

    千次阅读 2021-05-23 05:49:28
    学习备忘 转自:http://www.cnblogs.com/vranger/p/3820783.html电脑硬盘E盘下,建文件夹“test”,"test"下建立子文件夹“file”,"file"下建子文件夹“data”,电脑资源管理器显示目录 E:\test\file\data当前 路径 ...
  • 1、工作路径工作路径是伴随着进程或者当前运行程序而存在的,表示该进程或者运行程序是在哪个路径下被打开的。比如下面这个例子在 “E:\juzicode” 路径下运行cmd命令行,则该cmd命令行的工作目录就是提示符”>”...
  • Linux绝对路径和相对路径

    千次阅读 2022-01-12 18:07:22
    指明一个文件的存放位置有两种方法,分别是使用绝对路径和相对路径。 绝对路径:一定是由根目录/开始写起的。例如Nginx的配置文件的绝对路径为:/usr/local/nginx/conf/nginx.conf。如果仅给Linux系统传递一个...
  • 相对路径和绝对路径(简单易懂)

    千次阅读 2022-02-05 13:05:52
    相对路径:从一个目录为起点到另外一个的目录的路径。举例: 比如你的C盘有一个文件夹叫FIle,文件下有两个文件file one 和 file two 表示出file two的方法有两种 第一种(绝对路径表示法):C:\FIle\file two 第二...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 706,040
精华内容 282,416
关键字:

相对路径

友情链接: 土壤+人体.zip