uri 订阅
在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。 展开全文
在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。
信息
英文缩写
URI
应    用
万维网
外文名
Uniform Resource Identifier
释    义
是一个用于标识某一互联网资源名称的字符串
中文名
统一资源标识符
性    质
电脑术语
URI历史
URI与URL有着共同的历史。在1990年,Tim Berners-Lee的关于超文本的提案间接地引入了使用URL作为一个表示超链接目标资源的短字符串的概念。当时,人们称之为“超文本名”或“文档名”。在之后的三年半中,由于万维网的HTML(超文本标记语言)核心技术、HTTP与浏览器都得到了发展,区别提供资源访问和资源标记的两种字符串的必要性开始显现。虽然其时尚未被正式定义,但“统一资源定位符”这一术语开始被用于代表前者,而后者则由“统一资源名称”所表示。在关于定义URL和URN的争论中,人们注意到两者事实上基于同一个基础的“资源标识”的概念。在1994年6月,IETF发布了Berners-Lee的RFC 1630,(非正式地)指出了URL和URN的存在,并进一步定义了“通用资源标识符”——语义和语法由具体协议规定的类URL字符串的规范文法。此外,该RFC文档亦尝试定义了其时正被使用着的URL协议的文法,同时指出(但并未标准化)了相对URL和片段标识符的存在。1994年12月,RFC 1738 正式定义了绝对和相对URL,改进了URL文法,定义了如何解析URL为绝对形式,并更加完善地列举了其时正处于使用中的URL协议。而URN定义和文法直到1997年5月RFC 2141公布后才正式统一。1998年8月,随着RFC 2396的发表,URI文法形成了独立的标准,同时RFC 1630和1738中关于URI和URL的许多部分也得到了修订和增补。新RFC修改了“URI”中“U”的含义:它开始代表统一(Uniform)而不再是通用(Universal)。RFC 1738中总结了既存URL协议的部分被移至另外一篇独立文档中。IANA 保留着这些协议的注册信息,而RFC 2717首次描述了注册它们的流程。在1999年12月,RFC 2732对RFC 2396进行了小幅更新,开始允许URI包括IPv6地址。一段时间以后,在两个标准中暴露出的一些问题促使了一系列的修订草案的发展,这些草案被统称为rfc2396bis。这一由RFC 2396的共同作者Roy Fielding引导协调的集体努力,由2005年1月RFC 3986的发布推至了顶峰。该RFC文档成为了现今(2009年)于互联网上被推荐使用的URI文法版本,并使得RFC 2396成为了历史。然而,它却并未替代现有的URL协议细节;RFC 1738继续管辖着大多数协议,除了某些已被它取而代之的场合——例如被RFC 2616改良的”HTTP”协议等。与此同时,IETF发布了RFC 3986,亦即完整的STD 66标准,标识着URI通用文法正式成官方因特网协议。在2002年8月,RFC 3305指出,虽然术语“URL”仍被广泛地用于日常用语之中,但其本身已几乎被废弃。其功用,仅是作为对于某些URI因包含某种指示着网络可达性的协议而作为地址存在的提醒而已。基于URI的众多标准,例如资源描述框架等,已经清楚地表明,资源标识本无需指出通过互联网获得资源副本的方法,亦无须指出资源是否基于网络。在2006年2月,RFC 4395用了15页详细阐述了《关于新的URI方案的指导方针和登记程序》 [1]  在2006年11月1日,W3C技术架构小组公布了《连接替代副本使查找和发布可行化》,一个对于发布给定资源的多个版本的权威URI和其最佳实践的指导。例如,内容可能因用于访问资源的设备的支持性和设定不同,而语言或大小上有所调整已适应这种差异。
收起全文
精华内容
下载资源
问答
  • URI和URL的区别比较与理解

    万次阅读 多人点赞 2018-06-04 10:12:03
    一、URI <1>什么是URI URI,通一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行定位的。 <2>URI的结构组成 ...

    一、URI

    <1>什么是URI

    URI,统一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。

    <2>URI的结构组成

    URI通常由三部分组成:

    ①资源的命名机制;

    ②存放资源的主机名;

    ③资源自身的名称。

    (注意:这只是一般URI资源的命名方式,只要是可以唯一标识资源的都被称为URI,上面三条合在一起是URI的充分不必要条件)

    <3>URI举例

    如:https://blog.csdn.net/qq_32595453/article/details/79516787

    我们可以这样解释它:

    ①这是一个可以通过https协议访问的资源,

    ②位于主机 blog.csdn.net上,

    ③通过“/qq_32595453/article/details/79516787”可以对该资源进行唯一标识(注意,这个不一定是完整的路径)

    注意:以上三点只不过是对实例的解释,以上三点并不是URI的必要条件,URI只是一种概念,怎样实现无所谓,只要它唯一标识一个资源就可以了。

    二、URL

    URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位 符”。

    通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。

    采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL是URI概念的一种实现方式。

    URL的一般格式为(带方括号[]的为可选项):

    protocol :// hostname[:port] / path / [;parameters][?query]#fragment

    URL的格式由三部分组成: 

    ①第一部分是协议(或称为服务方式)。

    ②第二部分是存有该资源的主机IP地址(有时也包括端口号)。

    ③第三部分是主机资源的具体地址,如目录和文件名等。

    第一部分和第二部分用“://”符号隔开,

    第二部分和第三部分用“/”符号隔开。

    第一部分和第二部分是不可缺少的,第三部分有时可以省略。 

    三、URI和URL之间的区别

    从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

     

    --------------------------------------------

    更新:看了一下大家的疑问,其实大家对uri可以认为只是唯一识别的编号,类似于大家的身份证号,而url就是身份证住址+姓名,这样是不是就很明显了~~

    更新2:针对大部分同学的疑问,其实纠结的就是URI到底是什么,怎么它就是URI不是URL了,其实文章中都已交代,只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL,这是最简单的总结了,希望对大家有所帮助,祝好~~

    展开全文
  • Uri详解之——Uri结构与代码提取

    万次阅读 多人点赞 2015-03-27 17:15:49
    相关博客:1、《Uri详解之——Uri结构与代码提取》2、《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》 上几篇给大家讲了ContentProvider,里面有用到Uri,可能很多同学对Uri是什么,怎么来的,...

    前言:依然没有前言……


    相关博客:
    1、《Uri详解之——Uri结构与代码提取》
    2、《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》

     

    上几篇给大家讲了ContentProvider,里面有用到Uri,可能很多同学对Uri是什么,怎么来的,这些都不是很熟悉,今天就给大家具体讲讲Uri

    一、URI与Uri

    大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?

    名称如此相像的两个类是有什么区别和联系?

     

    • 1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置在android.net.Uri,是由Android提供的一个类。所以初步可以判断,Uri是URI的“扩展”以适应Android系统的需要。
    • 2.作用的不同。URI类代表了一个URI(这个URI不是类,而是其本来的意义:通用资源标志符——Uniform Resource Identifier)实例。Uri类是一个不可改变的URI引用,包括一个URI和一些碎片,URI跟在“#”后面。建立并且转换URI引用。而且Uri类对无效的行为不敏感,对于无效的输入没有定义相应的行为,如果没有另外制定,它将返回垃圾而不是抛出一个异常。

     

    看不懂?没关系,知道这个就可以了:Uri是Android开发的,扩展了JAVA中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;

    二、Uri结构

    (1)、基本形式:

     

    [scheme:]scheme-specific-part[#fragment]

    这里分为三部分:
    scheme、scheme-specific-part、fragment

    (2)、进一步划分:

     

    如果进一步划分的话是这样子的

     

    [scheme:][//authority][path][?query][#fragment]

    其中有下面几个规则:

    • path可以有多个,每个用/连接,比如
      scheme://authority/path1/path2/path3?query#fragment
    • query参数可以带有对应的值,也可以不带,如果带对应的值用=表示,如:
      scheme://authority/path1/path2/path3?id = 1#fragment,这里有一个参数id,它的值是1
    • query参数可以有多个,每个用&连接
      scheme://authority/path1/path2/path3?id = 1&name = mingming&old#fragment
      这里有三个参数:
      参数1:id,其值是:1
      参数2:name,其值是:mingming
      参数3:old,没有对它赋值,所以它的值是null
    • 在android中,除了scheme、authority是必须要有的,其它的几个path、query、fragment,它们每一个可以选择性的要或不要,但顺序不能变,比如:
      其中"path"可不要:scheme://authority?query#fragment
      其中"path"和"query"可都不要:scheme://authority#fragment
      其中"query"和"fragment"可都不要:scheme://authority/path
      "path","query","fragment"都不要:scheme://authority
      等等……

     

    (3)、终极划分

    其中authority,又可以分为host:port的形式,即再次划分后是这样的:

     

    [scheme:][//host:port][path][?query][#fragment]

    所以这是划分最细的形式,其中host:port用冒号分隔,冒号前的是host,冒号后的port;

    三、示例

     

    经过上面的讲解,想必大家的Uri的结构就有所了解了,下面我们就实例看看各部分的识别方式。

     

    [scheme:]scheme-specific-part[#fragment]
    [scheme:][//authority][path][?query][#fragment]
    [scheme:][//host:port][path][?query][#fragment]

    先列出这三种Uri形式,好让大家对比;
    针对下面一个Uri字符串来匹配一下各个部分:

    http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic
    • scheme:匹对上面的两个Uri标准形式,很容易看出在:前的部分是scheme,所以这个Uri字符串的sheme是:http
    • scheme-specific-part:很容易看出scheme-specific-part是包含在scheme和fragment之间的部分,也就是包括第二部分的[//authority][path][?query]这几个小部分,所在这个Uri字符串的scheme-specific-part是://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4 ,注意要带上//,因为除了[scheme:]和[#fragment]部分全部都是scheme-specific-part,当然包括最前面的//;
    • fragment:这个是更容易看出的,因为在最后用#分隔的部分就是fragment,所以这个Uri的fragment是:harvic
      下面就是对scheme-specific-part进行拆分了;
      在scheme-specific-part中,最前端的部分就是authority,?后面的部分是query,中间的部分就是path
    • authority:很容易看出scheme-specific-part最新端的部分是:www.java2s.com:8080
    • query:在scheme-specific-part中,?后的部分为:stove=10&path=32&id=4
    • path:在**query:**在scheme-specific-part中,除了authority和query其余都是path的部分:/yourpath/fileName.htm
      又由于authority又一步可以划分为host:port形式,其中host:port用冒号分隔,冒号前的是host,冒号后的是port,所以:
    • host:www.java2s.com
    • port:8080

    四、代码提取

     

    上面我们通过实例讲解了肉眼识别Uri更部分的方式,但在代码中又要怎样提取呢。下面就看看Uri中提取各部分的接口,依然以上面的Uri字符串为例:

     

    http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic
    • getScheme() :获取Uri中的scheme字符串部分,在这里即,http
    • getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?
    • getFragment():获取Uri中的Fragment部分,即harvic
    • getAuthority():获取Uri中Authority部分,即www.java2s.com:8080
    • getPath():获取Uri中path部分,即/yourpath/fileName.htm
    • getQuery():获取Uri中的query部分,即stove=10&path=32&id=4
    • getHost():获取Authority中的Host字符串,即www.java2s.com
    • getPost():获取Authority中的Port字符串,即8080

    另外还有两个常用的:getPathSegments()、getQueryParameter(String key)

     

     

    • List< String> getPathSegments():上面我们的getPath()是把path部分整个获取下来:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各个部分的字符串,以字符串数组的形式输出。以上面的Uri为例:

     

     

    String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic";
    Uri mUri = Uri.parse(mUriStr);
    List<String> pathSegList = mUri.getPathSegments();
    for (String pathItem:pathSegList){
        Log.d("qijian","pathSegItem:"+pathItem);
    }

    打出来的列表为:

     

     

    • getQueryParameter(String key):在上面我们通过getQuery()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值。

     

     

    String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id#harvic";
    mUri = Uri.parse(mUriStr);
    Log.d(tag,"getQueryParameter(\"stove\"):"+mUri.getQueryParameter("stove"));
    Log.d(tag,"getQueryParameter(\"id\"):"+mUri.getQueryParameter("id"));

    注意注意,我稍微更改了下字符串,把query中id的值去掉了!!!!!然后看看通过getQueryParameter("id")获取它的值会得到什么!
    结果如下:

     

    可以看到,在path中,即使针对某一个KEY不对它赋值是允许的,但在利用getQueryParameter()获取该KEY对应的值时,获取到的是null;

    五、扩展

    1、 绝对URI和相对URI

    绝对URI:以scheme组件起始的完整格式,如http://fsjohnhuang.cnblogs.com。表示以对标识出现的环境无依赖的方式引用资源。
    相对URI:不以scheme组件起始的非完整格式,如fsjohnhuang.cnblogs.com。表示以对依赖标识出现的环境有依赖的方式引用资源。

     

    2、不透明URI和分层URI

    不透明URI:scheme-specific-part组件不是以正斜杠(/)起始的,如mailto:fsjohnhuang@xxx.com。由于不透明URI无需进行分解操作,因此不会对scheme-specific-part组件进行有效性验证。
    分层URI:scheme-specific-part组件是以正斜杠(/)起始的,如http://fsjohnhuang.com。

     

     

     

    更多有关本扩展和标准化(Normalization)、解析化(Resolution)、相对化(Relativization)的知识参见:《Java魔法堂:URI、URL(含URL Protocol Handler)和URN》

     

    下面源码中演示了各个提取函数的用法及结果;

    如果本文有帮到你,记得关注哦

    源码下载地址:http://download.csdn.net/detail/harvic880925/8539679

    请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/44679239 谢谢

     

    如果你喜欢我的文章,你可能更喜欢我的公众号

    启舰杂谈

     

    展开全文
  • uriURI操作库-源码

    2021-02-05 15:04:37
    URI Uri软件包提供了简单直观的类来管理PHP中的URI。 你将能够 解析,构建和解析URI 从不同来源(字符串,PHP环境,基本URIURI模板等)创建URI; 处理内部化; 从URI推断属性和特征; <?php use League \ ...
  • 除了URI扩展之外,它还支持URI提取(200多个测试用例)。 URI模板 用法 扩张 一个非常简单的用法(字符串扩展)。 <?php use Rize \ UriTemplate ; $ uri = new UriTemplate (); $ uri -> expand ( '/{...
  • URI问题已解决 uri1581 uri1558 uri1536解放者 uri1767 uri1148国家处于战争中
  • 数据URI 数据URI操作变得容易。 这不是很可靠,并且会拒绝许多有效的数据URI。 但是,它遇到了最有用的情况:模仿类型,字符集和base64标志。 安装 $ pip install python-datauri 解析中 >> > from datauri ...
  • network-uri软件包 该软件包提供了用于解析和解析URI以及创建和解析相对URI引用的工具,这些工具紧紧遵循URI规范IETF RFC 3986 [1]。 该程序包中的主要模块Network.URI从network-2.6发行版的网络程序包中分离出来。...
  • 亚马逊S3URI 可以解析出有关 S3 URI 的信息的 URI 包装器 无耻地改编自 除了明显的例外: 它不解析version 给定的url字符串没有预处理(如果需要,您必须自己编码和替换特殊字符) 对于有效的 S3 uri, region...
  • Android中的URIUri

    万次阅读 2018-04-21 15:11:17
    一、URIUri大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?名称如此相像的两个类是有什么区别和联系?1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置...

    一、URI与Uri

    大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?

    名称如此相像的两个类是有什么区别和联系?

    • 1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置在android.net.Uri,是由Android提供的一个类。所以初步可以判断,Uri是URI的“扩展”以适应Android系统的需要。
    • 2.作用的不同。URI类代表了一个URI(这个URI不是类,而是其本来的意义:通用资源标志符——Uniform Resource Identifier)实例。Uri类是一个不可改变的URI引用,包括一个URI和一些碎片,URI跟在“#”后面。建立并且转换URI引用。而且Uri类对无效的行为不敏感,对于无效的输入没有定义相应的行为,如果没有另外制定,它将返回垃圾而不是抛出一个异常。

    看不懂?没关系,知道这个就可以了:Uri是Android开发的,扩展了JAVA中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;

    二、Uri结构

    (1)、基本形式:

    [html]  view plain  copy
    1. [scheme:]scheme-specific-part[#fragment]  
    这里分为三部分:
    scheme、scheme-specific-part、fragment

    (2)、进一步划分:

    如果进一步划分的话是这样子的

    [html]  view plain  copy
    1. [scheme:][//authority][path][?query][#fragment]  
    其中有下面几个规则:
    • path可以有多个,每个用/连接,比如
      scheme://authority/path1/path2/path3?query#fragment
    • query参数可以带有对应的值,也可以不带,如果带对应的值用=表示,如:
      scheme://authority/path1/path2/path3?id = 1#fragment,这里有一个参数id,它的值是1
    • query参数可以有多个,每个用&连接
      scheme://authority/path1/path2/path3?id = 1&name = mingming&old#fragment
      这里有三个参数:
      参数1:id,其值是:1
      参数2:name,其值是:mingming
      参数3:old,没有对它赋值,所以它的值是null
    • 在android中,除了scheme、authority是必须要有的,其它的几个path、query、fragment,它们每一个可以选择性的要或不要,但顺序不能变,比如:
      其中"path"可不要:scheme://authority?query#fragment
      其中"path"和"query"可都不要:scheme://authority#fragment
      其中"query"和"fragment"可都不要:scheme://authority/path
      "path","query","fragment"都不要:scheme://authority
      等等……

    (3)、终极划分

    其中authority,又可以分为host:port的形式,即再次划分后是这样的:

    [html]  view plain  copy
    1. [scheme:][//host:port][path][?query][#fragment]  
    所以这是划分最细的形式,其中host:port用冒号分隔,冒号前的是host,冒号后的port;

    三、示例

    经过上面的讲解,想必大家的Uri的结构就有所了解了,下面我们就实例看看各部分的识别方式。

    [html]  view plain  copy
    1. [scheme:]scheme-specific-part[#fragment]  
    2. [scheme:][//authority][path][?query][#fragment]  
    3. [scheme:][//host:port][path][?query][#fragment]  
    先列出这三种Uri形式,好让大家对比;
    针对下面一个Uri字符串来匹配一下各个部分:
    [java]  view plain  copy
    1. http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic  
    • scheme:匹对上面的两个Uri标准形式,很容易看出在:前的部分是scheme,所以这个Uri字符串的sheme是:http
    • scheme-specific-part:很容易看出scheme-specific-part是包含在scheme和fragment之间的部分,也就是包括第二部分的[//authority][path][?query]这几个小部分,所在这个Uri字符串的scheme-specific-part是://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4 ,注意要带上//,因为除了[scheme:]和[#fragment]部分全部都是scheme-specific-part,当然包括最前面的//;
    • fragment:这个是更容易看出的,因为在最后用#分隔的部分就是fragment,所以这个Uri的fragment是:harvic
      下面就是对scheme-specific-part进行拆分了;
      在scheme-specific-part中,最前端的部分就是authority,?后面的部分是query,中间的部分就是path
    • authority:很容易看出scheme-specific-part最新端的部分是:www.java2s.com:8080
    • query:在scheme-specific-part中,?后的部分为:stove=10&path=32&id=4
    • path:在**query:**在scheme-specific-part中,除了authority和query其余都是path的部分:/yourpath/fileName.htm
      又由于authority又一步可以划分为host:port形式,其中host:port用冒号分隔,冒号前的是host,冒号后的是port,所以:
    • host:www.java2s.com
    • port:8080

    四、代码提取

    上面我们通过实例讲解了肉眼识别Uri更部分的方式,但在代码中又要怎样提取呢。下面就看看Uri中提取各部分的接口,依然以上面的Uri字符串为例:

    [java]  view plain  copy
    1. http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic  
    • getScheme() :获取Uri中的scheme字符串部分,在这里即,http
    • getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?
    • getFragment():获取Uri中的Fragment部分,即harvic
    • getAuthority():获取Uri中Authority部分,即www.java2s.com:8080
    • getPath():获取Uri中path部分,即/yourpath/fileName.htm
    • getQuery():获取Uri中的query部分,即stove=10&path=32&id=4
    • getHost():获取Authority中的Host字符串,即www.java2s.com
    • getPost():获取Authority中的Port字符串,即8080
    另外还有两个常用的:getPathSegments()、getQueryParameter(String key)

    • List< String> getPathSegments():上面我们的getPath()是把path部分整个获取下来:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各个部分的字符串,以字符串数组的形式输出。以上面的Uri为例:

    [java]  view plain  copy
    1. String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic";  
    2. Uri mUri = Uri.parse(mUriStr);  
    3. List<String> pathSegList = mUri.getPathSegments();  
    4. for (String pathItem:pathSegList){  
    5.     Log.d("qijian","pathSegItem:"+pathItem);  
    6. }  
    打出来的列表为:

    • getQueryParameter(String key):在上面我们通过getQuery()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值。

    [java]  view plain  copy
    1. String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id#harvic";  
    2. mUri = Uri.parse(mUriStr);  
    3. Log.d(tag,"getQueryParameter(\"stove\"):"+mUri.getQueryParameter("stove"));  
    4. Log.d(tag,"getQueryParameter(\"id\"):"+mUri.getQueryParameter("id"));  
    注意注意,我稍微更改了下字符串,把query中id的值去掉了!!!!!然后看看通过getQueryParameter("id")获取它的值会得到什么!
    结果如下:

    可以看到,在path中,即使针对某一个KEY不对它赋值是允许的,但在利用getQueryParameter()获取该KEY对应的值时,获取到的是null;

    五、扩展

    1、 绝对URI和相对URI

    绝对URI:以scheme组件起始的完整格式,如http://fsjohnhuang.cnblogs.com。表示以对标识出现的环境无依赖的方式引用资源。 
    相对URI:不以scheme组件起始的非完整格式,如fsjohnhuang.cnblogs.com。表示以对依赖标识出现的环境有依赖的方式引用资源。 

    2、不透明URI和分层URI

    不透明URI: scheme-specific-part组件不是以正斜杠(/)起始的,如mailto:fsjohnhuang@xxx.com。由于不透明URI无需进行分解操作,因此不会对scheme-specific-part组件进行有效性验证。 
    分层URI: scheme-specific-part组件是以正斜杠(/)起始的,如http://fsjohnhuang.com。


    展开全文
  • android10以上 uri转file uri转真实路径

    万次阅读 热门讨论 2020-05-18 10:50:06
    fun uriToFile(context: Context, uri: Uri): File? = when(uri.scheme){ ContentResolver.SCHEME_FILE -> uri.toFile() ContentResolver.SCHEME_CONTENT ->{ val cursor = context.contentResolver.query...

    android10以后,只需要考虑沙盒里的文件uri和共享文件(匿名uri)、通过文件选择器获取到的uri的转换;其他类型,要么转换不成File,要么拿不到,也就不用再考虑了

    事实上android10之后,是无法拿到外部文件的绝对路径的,唯一能做的,只是把共享文件复制到沙盒目录下,然后再进行文件操作

    沙盒里的文件(file开头),可以直接转成File使用,共享文件(content开头)如果要操作,需要先复制到沙盒目录下

    kotlin写法

    @RequiresApi(Build.VERSION_CODES.Q)
    private fun uriToFileQ(context: Context, uri: Uri): File? =
        if (uri.scheme == ContentResolver.SCHEME_FILE)
            File(requireNotNull(uri.path))
        else if (uri.scheme == ContentResolver.SCHEME_CONTENT) {
            //把文件保存到沙盒
            val contentResolver = context.contentResolver
            val displayName = "${System.currentTimeMillis()}${Random.nextInt(0, 9999)}.${
                MimeTypeMap.getSingleton()
                    .getExtensionFromMimeType(contentResolver.getType(uri))}"
            val ios = contentResolver.openInputStream(uri)
            if (ios != null) {
                File("${context.cacheDir.absolutePath}/$displayName")
                    .apply {
                        val fos = FileOutputStream(this)
                        FileUtils.copy(ios, fos)
                        fos.close()
                        ios.close()
                    }
            } else null
        } else null

     

    java写法

        @RequiresApi(api = Build.VERSION_CODES.Q)
        public static File uriToFileApiQ(Uri uri, Context context) {
            File file = null;
            if(uri == null) return file;
            //android10以上转换
            if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {
                file = new File(uri.getPath());
            } else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
                //把文件复制到沙盒目录
                ContentResolver contentResolver = context.getContentResolver();
                String displayName = System.currentTimeMillis()+ Math.round((Math.random() + 1) * 1000)
                        +"."+ MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri));
                
    //            注释掉的方法可以获取到原文件的文件名,但是比较耗时
    //            Cursor cursor = contentResolver.query(uri, null, null, null, null);
    //            if (cursor.moveToFirst()) {
    //                String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));}
    
                try {
                    InputStream is = contentResolver.openInputStream(uri);
                    File cache = new File(context.getCacheDir().getAbsolutePath(), displayName);
                    FileOutputStream fos = new FileOutputStream(cache);
                    FileUtils.copy(is, fos);
                    file = cache;
                    fos.close();
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return file;
        }

     

    android9以下转换方法网上一堆,自己找哈

     

    展开全文
  • 请注意,我们正在迁移到 GitHub:https://github.com/uriparser/uriparser uriparser 是一个严格符合 RFC 3986 的 URI 解析库,用 C89 编写。 uriparser 是跨平台的、快速的、支持 Unicode 并在新 BSD 许可下获得...
  • Dart中用于处理的实用程序,主要用于解析和生成URI。 UriPattern UriPattern是用于匹配和解析URI的类的接口,就像是用于String的接口一样。 它定义了方法bool matches(Uri uri)和UriMatch match(Uri uri) 。 ...
  • URI malformed

    千次阅读 2020-08-24 16:59:47
    问题: 通过<Link>进行路由跳转 报错URI malformed 原因: 由于decodeURI转码时,通过%进行解析,如果字符串中存在%,则会出现URI malformed 解决:
  • 说明Android页面之间传递不提供传递Uri类型,但是去截屏页面截图,把图片返回到操作页面显示,需要把相册或者相机的Uri连接传递的。代码 返回:private Uri imageUri; .... Intent intent = new Intent(this, ...
  • DataURI

    千次阅读 2016-12-27 00:37:21
    Data URI 协议
  • URL和URI(二)URI

    千次阅读 2018-09-27 17:10:08
    URIURI是对URL的抽象,不仅包括统一资源定位符(Uniform Resource Locator,URL)还包括统一资源名(Uniform Resource Names,URN)。实际使用的URI大多是URL,正常情况下,假如你想下载一个URL的内容,应当使用...
  • 通过uri获取文件大小有两种方法,一种是通过FileDescriptor获取 fun length(context: Context, uri: Uri): Long = when (uri.scheme) { ContentResolver.SCHEME_FILE -> File(uri.path).length() ...
  • Android Intent调用 Uri的方法总结 //调用浏览器 Uri uri = Uri.parse(); Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity(it); //显示某个坐标在地图上 Uri uri = Uri.parse(geo:38.899533,-...
  • Android中Uri的使用

    千次阅读 2017-07-12 14:22:19
    uri
  • Nginx $request_uri和$uri详解

    千次阅读 2020-05-29 14:09:07
    $uri nginx中的$uri记录的是执行一系列内部重定向操作后最终传递到后端服务器的URL 包含请求的文件名和路径,不包含包含“?”或“#”等参数。 完整URL链接:http://www.alipay.com/alipay/index.html $uri:/alipay...
  • URL和URI的区别

    万次阅读 多人点赞 2018-03-21 12:21:51
    URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。 URL = Universal Resource ...
  • 可以根据不同情况传入不同databaseUri例如查询音频数据MediaStore.Audio.Media.EXTERNAL_CONTENT_URI或者查询图片数据库MediaStore.Audio.Media.EXTERNAL_CONTENT_URIpublic Uri queryUriforAudio(String path,Uri ...
  • Web基础-Uri跟Url的区别

    万次阅读 多人点赞 2017-05-23 16:03:14
    参考博客:关于URL跟URI的区别,个人见解 - J2EE 关于URL和URI的区别,个人见解。 初学java,最近被一个概念搞得头晕脑胀,就是url和uri的概念和区别,网上查了一大通,发现各种回答眼花缭乱,有百科直接粘贴的,有...
  • nginx常见内置变量$uri和$request_uri

    万次阅读 2019-12-31 09:30:58
    这里介绍nginx常见内置变量uriuriuri和request_uri代表的值,首先先看nginx配置: [root@CentOS7-2 conf.d]# cat default.conf server { listen 80; server_name localhost; #charset koi8-r; #...
  • 如何将String转为Uri,Uri转为Drawable

    万次阅读 2016-06-04 15:33:38
    String转Uri Uri uri=Uri.parse(s); Uri转Drawable Drawable d=Drawable.createFromStream(getContentResolver().openInputStream(uri,null));
  • URI 权限

    千次阅读 2017-10-16 13:24:27
    URI 权限 到目前为止所述的是标准权限系统,内容提供程序仅仅使用此系统通常是不够的。内容提供程序可能需要通过读取和写入权限保护自己,而其直接客户端也需要将特定 URI 传给其他应用以便于它们运行。邮件...
  • URIUri是什么关系,我在获取图片的时候通过日志打印出来的路径是一样的
  • URI】Android常用URI

    千次阅读 2013-06-03 16:41:46
    以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent 一、打开一个网页,类别是Intent.ACTION_VIEW Uri uri = Uri.parse("http://www.android-study.com/"); Intent intent = new Intent...
  • nginx中,$request_uri和$uri的区别

    千次阅读 2020-07-09 08:46:25
    $request_uri This variable is equal to the original request URI as received from the client including the args. It cannot be modified. Look at uriforthepost−rewrite/alteredURI.Doesnotincludehostname....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 737,873
精华内容 295,149
关键字:

uri