精华内容
下载资源
问答
  • 绝对路径、相对路径详解

    千次阅读 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/” – 物理路径,绝对路径。
    简单,略!

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

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

    相对路径

    例子 

    绝对路径

    例子 

    给客户端浏览器使用

    给服务器使用


     

    相对路径

    不以斜杠/开头。以点.开头的路径。比如

    • ./:当前目录
    • ../:后退以及目录
    • 既不以/开头,也不以./开头的路径,默认为./开头,比如xxx等价于./xxx

    通过相对路径不可以确定唯一资源

    例子 

     先看我们的项目目录接口,有2个页面,a.html和b.html,不在同一级目录,还有一个资源是/demo4

     a.html的代码为

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>a</title>
    </head>
    <body>
        <h1>这是a</h1>
        <h3>a的路径为http://localhost:8080/bServlet/a.html</h3>
        <a href="demo4">相对路径到demo4</a><br>
        <a href="./demo4">相对路径到demo4</a><br>
        <a href="/bServlet/demo4">绝对路径到demo4</a>
    </body>
    </html>

     

    b.html的代码为

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>b</title>
    </head>
    <body>
        <h1>这是b</h1>
        <h3>b的路径为http://localhost:8080/bServlet/html/b.html</h3>
        <a href="../demo4">相对路径到demo4</a><br>
    </body>
    </html>

     

    资源/demo4的代码为

    package com.lingaolu.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    /**
     * @author 林高禄
     * @create 2020-07-07-16:46
     */
    @WebServlet(value="/demo4")
    public class ServletDemo4 extends HttpServlet {
    
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doGet.....demo4.");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doPost......demo4");
        }
    }
    

     

    启动访问

     

      

    从上面可以知道

    • /demo4的全路径为http://localhost:8080/bServlet/demo4
    • a.html的全路径为http://localhost:8080/bServlet/a.html
    • b.html的全路径为http://localhost:8080/bServlet/html/a.html

    所以,对本次例子来说:

    • a.html相对路径访问/demo4的时候,可以是./demo4也可以是demo4,因为demo4也会被转为./demo4
    • a.html绝对路径访问/demo4的时候,是/bServlet/demo4
    • b.html相对路径访问/demo4的时候,因为b.html和/demo4不在同一层路径目录,而b.html的上一层html和/demo4才在同一层目录,所以b.html相对路径访问/demo4是../demo4,(../表示返回上一层)

     以上a.html和b.html的所以a标签都能访问到资源/demo4

    绝对路径

    以斜杠/开头的路径,比如

    • /xxx

    通过绝对路径可以确定唯一资源

    绝对路径规则,看需不需要加虚拟目录

    • 给客户端浏览器使用,需要加虚拟目录
    • 给服务器使用,不需要加虚拟目录 

    例子 

    给客户端浏览器使用

    比如Response重定向详情,因为重定向是多次请求,每次请求都是返回给客户端重新请求的,所以需要加虚拟路径

    给服务器使用

    比如Request请求转发详解,因为请求转发是服务器内部的转发,只请求一次,所以不需要加虚拟路径

     

    展开全文
  • 相对路径和绝对路径的区别(详解)

    千次阅读 多人点赞 2020-01-13 11:58:23
    1.绝对路径 绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg...

    1.绝对路径

        绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。那么如果要使用绝对路径指定网页的背景图片就应该使用 以下语句:

    <body backround="E:\book\网页布局\代码\第2章\bg.jpg" > 

     

      2.使用绝对路径的缺点

       事实上,在网页编程时,很少会使用绝对路径,如果使用“E:\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上 浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘, 有可能是D盘或H盘。即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:\book\网页布局\代码\第2章”这个目录,因此在浏 览网页时是不会显示图片的。

     

      3.相对路径

        为了避免这种隋况发生,通常在网页里指定文件时,都会选择使用相对路径。所谓相对路径,就是相对于自己的目标文件位置。例如上面的例子,“s1.htm” 文件里引用了“bg.jpg”图片,由于“bg.jpg”图片相对于“s1.htm”来说,是在同一个目录的,那么要在“s1.htm”文件里使用以下代 码后,只要这两个文件的相对位置没有变(也就是说还是在同一个目录内),那么无论上传到Web服务器的哪个位置,在浏览器里都能正确地显示图片。

          <body background="bg.jpg">

    再 举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页 布局\代码\第2章\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的“img”子目录里,则引用图片的语句应该 为:

          <body background="img/bg.jpg">  

    在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。

        注意:相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符。由于“img”目录是“第2章”目录下的子目录,因此在“img”前不用再加上“/”字符。

    在 相对路径里常使用“../”来表示上一级目录。如果有多个上一级目录,可以使用多个“../”,例如“http://www.cnblogs.com/”代表上上级目录。假设 “s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页布局\代码”,那 么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为:

          <body background="../bg.jpg">  

     

      再举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网 页布局\代码\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里的“img”子目录里,则引用图片的语句 应该为:

          <body background="../img/bg.jpg">  

     

    4.相对虚拟目录

    有关相对路径还有一个比较特殊的表示:“相对虚拟目录”。请看下面的例子:

          <body background="/img/bg.jpg">  

     

      在这个例子里,background属性的值为“/img/bg.jpg”,注意在“img”前有一个“/”字符。这个“/”代表的是虚拟目录的根目录. 假设把“E:\book\网页布局\代码”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页布局\代码\img \bg.jpg”;如果把“E:\book\网页布局\代码\第2章”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页 布局\代码\第2章\img\bg.jpg”

    展开全文
  • python相对路径和绝对路径总结

    千次阅读 2020-07-24 14:06:43
    Contents1 当前工作目录1.1 os.getcwd() 函数可用于获取当前工作目录1.2 os.chdir() 函数可用于获取当前工作目录2 相对路径和绝对路径3 python的os.path模块提供的路径相关函数3.1 os.getcwd() 函数:获取当前工作...

    1 当前工作目录

    某本书中提到:“Every program that runs on your computer has a current working directory, or cwd. Any filenames or paths that do not begin with the root folder are assumed to be under the current working directory .”

    翻译为:每一个运行在计算机中的程序都有一个当前工作目录(或cwd),任何不以根文件夹开始的文件名或路径,都被假定在当前工作目录之下。

    1.1 os.getcwd() 函数可用于获取当前工作目录

    >>> import os
    >>> os.getcwd()
    'E:\\Coding\\pycharm\\cifar10'
    

    1.2 os.chdir() 函数可用于修改当前工作目录

    >>> os.chdir("C:\\Windows")
    >>> os.getcwd()
    'C:\\Windows'
    

    1.3 os.listdir(path) 方法

    用于返回指定的文件夹包含的文件或文件夹的名字的列表;
    只支持在 Unix, Windows 下使用。
    

    2 相对路径和绝对路径

    绝对路径:总是从根文件夹开始,Window 系统中以盘符(C:、D:)作为根文件夹,而 OS X 或者 Linux 系统中以 / 作为根文件夹。
    相对路径:指的是文件相对于 当前工作目录所在的位置。

          在使用相对路径表示某文件所在的位置时,经常使用.\表示当前所在目录,还有..\表示当前所在目录的父目录。以下图为例,如果当前工作目录设置为 C:\bacon,则图中其他文件夹和文件的相对路径和绝对路径对应为该图右侧所示的样子。(该图片源地址)
    在这里插入图片描述

    3 python的os.path模块提供的路径相关函数

    3.1 os.getcwd() 函数:获取当前工作目录

    >>> import os
    >>> os.getcwd()
    'E:\\Coding\\pycharm\\cifar10'
    

    3.2 os.path.abspath(path) :返回 path 参数的绝对路径的字符串

    os.path.abspath(".") ,获取当前文件所在路径;
    os.path.abspath("..") ,获取当前文件所在路径的上一层路径;

    # 可用于将相对路径转换为绝对路径 (当path = '.'时,表示当前工作目录)
    >>> os.getcwd()
    'E:\\Coding\\pycharm\\cifar10'
    >>> os.path.abspath(".")
    'E:\\Coding\\pycharm\\cifar10'
    >>> os.path.abspath("..")
    'E:\\Coding\\pycharm'
    

    3.3 os.path.isabs(path):判断 path 是否为绝对路径

    >>> os.path.isabs(".")
    False
    

    3.4 os.path.relpath(path, start) :返回从 start 路径到 path 的相对路径的字符串

    # 如果没有提供 start,则使用当前工作目录作为开始路径。
    >>> os.path.relpath("E:\\Coding")
    '..\\..'
    
    @ 注意:Windows环境中,该函数的path及start必须在同一个盘目录下,当一个为E盘,一个为F盘时会报错:
    >>> os.path.relpath("E:\\Coding", "F:\\anoconda")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "F:\Anaconda\envs\pytorch\lib\ntpath.py", line 562, in relpath
        path_drive, start_drive))
    ValueError: path is on mount 'E:', start on mount 'F:'
    

    3.5 os.path.dirname(path) / os.path.basename(path) / os.path.split() :获取路径

    os.path.dirname(path):返回包含 path 参数中最后一个斜杠之前的所有内容的字符串
    os.path.basename(path) :返回包含 path 参数中最后一个斜杠之后的所有内容的字符串
    os.path.split(path) :返回path路径的目录名称和基本名称这两个字符串组成的元组
    path.dirname(__file__)可返回当前文件所在目录(__file__为文件名)

    >>> path = "C:\\Windows\\system32\\xcopy.exe"
    >>> os.path.dirname(path)
    'C:\\Windows\\system32'
    >>> os.path.basename(path)
    'xcopy.exe'
    >>> os.path.split(path)  # 相当于前两个函数的组合使用
    ('C:\\Windows\\system32', 'xcopy.exe')
    

    4 路径拼接 os.path.join()用法

    os.path.join() 函数中可以传入多个路径:

    1. 如果各组件名首字母不包含 ‘/’,则函数会自动加上;
    2. 会从第一个以“/”开头的参数开始拼接,之前的参数全部丢弃;
    3. 优先判定上一种情况。若无,则如果出现“./”开头的参数,会从“./”开头的参数的上一个参数开始拼接;
    >>> print('1:', os.path.join("aaa", "bbb", "ccc.txt"))
    1: aaa\bbb\ccc.txt
    >>> print('2:', os.path.join("aaa", "/bbb", "ccc.txt"))
    2: /bbb\ccc.txt
    >>> print('3:', os.path.join("aaa", "./bbb", "ccc.txt"))
    3: aaa\./bbb\ccc.txt
    

    参考1:Python绝对路径和相对路径详解
    参考2:python 相对路径和绝对路径的区别

    欢迎关注【OAOA

    展开全文
  •  绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:/xyz/test.txt 代表了test.txt文件的绝对路径。http://www.baidu.com/index.html也代表了一个URL绝对路径绝对路径,...
  • 相对路径和绝对路径(带例子,详解)

    千次阅读 多人点赞 2019-10-14 11:02:30
    一、路径问题:在SpringMVC中可能涉及路径问题的地方。 //链接、表单提交、重定向和转发如何填写相应的路径。 <a href=""></a> <form action=""> response.sendRedirect("") request....
  • QT文件夹定位 QT文件夹绝对路径 QT文件夹绝对路径定位 QT文件夹定位 QT文件夹绝对路径 QT文件夹绝对路径定位 QT文件夹定位 QT文件夹绝对路径 QT文件夹绝对路径定位
  • 相对路径和绝对路径的区别

    千次阅读 2020-09-04 10:23:02
    例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。那么如果要使用绝对路径指定网页的背景图片就应该使用 ...
  • JAVA - 绝对路径&相对路径

    千次阅读 2018-05-29 14:33:53
    Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是API在底层帮助我们构建了绝对路径,从而找到资源的。基本概念 绝对路径:从根目录为参考点的文件或文件夹(即目录)所在的路径,只...
  • Web 图片引用之相对路径与绝对路径

    千次阅读 2019-11-06 14:34:07
    相对路径与绝对路径,在 Web 开发中我们会经常遇到,本文将尽可能详细的讲解相对路径与绝对路径的区别,并举例说明。 一、基本概念 相对路径(Relative Path): 相对路径就是指由这个文件所在的路径引起的跟其它...
  • 绝对路径是指文件在硬盘上的真实路径,而相对路径指的是相对于另一个文件来书,本文件的路径。(个人理解是,既然能用相对路径表示那也就说明了这两个问价同属于一个文件集下,如果一个在你的电脑,一个在我的电脑那...
  • 相对路径和绝对路径

    万次阅读 多人点赞 2018-09-25 09:52:02
    相对路径和绝对路径,往往都是初学者最困惑的知识点之一。在这一节,我们详细跟大家探讨一下这两者的区别和写法。 我们在C盘目录下建立一个网站,网站名称为“BookTest”,这个网站下的目录内容如下: 我们先...
  • # abspath() 将路径转换为绝对路径 # relpath() 将路径转化为相对路径 # . 点号代表当前目录 # .. 双点号代表父目录 absp = os.path.abspath('..') print(absp) absp = os.path.abspath('.') print(absp) ...
  • 绝对路径、相对路径的表示方法

    千次阅读 2020-04-13 14:39:49
    绝对路径和相对路径更多使用在前端代码编写时。 我以我的电脑中图片(dog.png, cat.png都放在img文件夹下)为例讲解。 绝对路径即文件完整的路径,地址开头带C:, D: 那种。但绝对路径只可限于在本地电脑上使用有效...
  • Servlet绝对路径与相对路径

    千次阅读 2018-08-18 17:05:49
    1.资源路径  在URL或URI中,最后一个斜杠(/)后的部分为资源名称,其他部分为资源路径。  例:http://localhost:8080/Servlets/index.jsp  资源路径:http://localhost:8080/Servlets  资源名称:index.jsp ...
  • 文件名 绝对路径与相对路径

    千次阅读 2020-02-17 00:03:45
    讲解绝对路径和相对路径
  • java URL相对路径转换成绝对路径

    千次阅读 2019-12-25 16:40:03
    原文链接:... //绝对路径 String absolutePath = "http://www.aaa.com/1/2/3.html"; //相对路径 String relativePath = "../../a.jpg"; //以下方法对相对路径进行转换 URL absoluteUr...
  • 路径详解(重点) 1、绝对路径 1、什么是绝对路径 文件从最高级目录下开始的完整路径 1、访问网络资源 1、由以下四个部分组成 1、协议名称 ...
  • 绝对路径:即主页文件或者目录在硬盘上真正的路径。 二、符号表示 以在 D:/dev/HelloWorld.java 中书写为例 ./:代表目前所在的路径(相对路径),./可省略./haha --> D:/dev/haha/ haha --> D:/dev...
  • 一、绝对路径和相对路径异同点: 两者的相同之处,在于两者都是对图像,音乐,网址,视频等文件资源的引用方法。 两者的不同之处,在于描述目录路径时,所采用的参考基准点不同。 绝对路径:直接指明文件在硬盘上...
  • 获取文件当前工作目录路径(绝对路径) 2. sys.path[0] 获取文件当前工作目录路径(绝对路径) sys.argv[0]|获得模块所在的路径(由系统决定是否是全名) 若显示调用python指令,如python demo.py,会得到绝对路径;...
  • 文件的绝对路径和相对路径

    万次阅读 2019-04-18 20:34:35
    绝对路径 从盘符开始的路径:C:\windows\system32\cmd.exe相对路径 从当前路径开始的路径 (1)若当前路径为C:\windows,只需输入:system32\cmd.exe,严格的相对路径写法应为:.\system32\cmd.exe,.表示当前路径,在...
  • java FTPClient中的相对路径和绝对路径

    千次阅读 2020-07-20 16:00:21
    根目录 FTPClient的根目录为"/" 切换到根目录 ftpClient.changeWorkingDirectory("/"); // 切换到根目录 String dir = ftpClient....绝对路径是以/开头的,比如"/AA","/AA/BB","/AA/BB/CC/","/AA/BB/CC/test.tx
  • Tomcat中访问的绝对路径与相对路径

    千次阅读 2018-07-27 18:41:10
    前言序锦 为期20天的暑期实习结束了,在实习过程中遇到了很多问题,也学到了很...在编写HTML网页中,我们会遇到很多从外部导入的文件,这个时候我们就会遇到很多路径加载的问题,而如果你对路径记载不清楚的话,...
  • Python3使用绝对路径和相对路径

    千次阅读 2020-05-01 13:05:24
    记录我在Python中使用 相对路径 和 绝对路径 遇到的一些问题。(笔记以Windows为例,同样适用于 Linux 和 Mac OS)   环境:Windows 10, Python 3.8.1 一、概念及作用 绝对路径 指 完整的描述文件...
  • Linux操作系统中存在着两种路径:绝对路径和相对路径。 我们在访问文件或文件夹的时候,其实都是通过路径来操作的。两种路径在实际操作中能起到同等的作用。 在开始具体介绍之前,我们需要了解Linux的文件系统是...
  • 我想在安卓里获取一个word文档,后缀名为.doc的Uri的绝对路径,但是不能成功, 然而当我获取一个图片的时候,没有任何问题,获取那些常规的媒体文件也没有问题,就是获取比如QQ浏览器里的文档的时候,就无法获取...
  • 方法/步骤 打开JUPYTER NOTEBOOK,新建一个空白的PY文档。... os.path.abspath('..\\a.txt') os.path.isabs('..\\') 这个方法可以判断目标是否为绝对路径。 os.path.isabs('C:\\') 只有书写正确才会返回正确值。
  • Linux绝对路径和相对路径

    千次阅读 2019-06-21 20:29:58
    ♥️♥️♥️♥️♥️♥️Linux 系统中,文件是存放在目录中的,而目录又...绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。 换句话说,绝对路径必须以一个正斜线...
  • 根据相对路径获取绝对路径

    千次阅读 2019-04-30 17:16:47
    在处理文件时,需要先获取文件的路径,这个路径一般取绝对路径,然而,大多时候我们只知道这个文件的相对项目的路径,这时候需要根据文件的相对路径获取绝对路径。 //只能接收相对路径,相对路径字符串最前不可以有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 580,048
精华内容 232,019
关键字:

绝对路径