精华内容
下载资源
问答
  • Content Provider,内容提供者,相信大家对这个组件的名字都不陌生,可能是自己平时做的都是一些简单的App,所以对于Content Provider的使用并不是很多,也不是特别熟悉。但是这里还是对Content Provider作个简单的...
  • C# uri

    千次阅读 2018-07-31 23:27:49
    而URN,uniform resource name,统一资源命名,是通过名字来标识资源。 也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。 简单演示构造方法: Uri ...

    URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源。 也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。


    简单演示构造方法:

     Uri baseUri = new Uri("https://blog.csdn.net");
     Uri myUri = new Uri(baseUri, "qq_36330228/article/details/70212771");
     Console.WriteLine(myUri);
     //结果:https://blog.csdn.net/qq_36330228/article/details/70212771

    uri各部分获取属性:

    Uri uriAddress = new Uri("https://blog.csdn.net/qq_36330228/article/details/70212771?id=1&name=zs#search");
    Console.WriteLine(uriAddress.Scheme);       //https
    Console.WriteLine(uriAddress.Authority);    //blog.csdn.net
    Console.WriteLine(uriAddress.Host);         //blog.csdn.net
    Console.WriteLine(uriAddress.Port);         //443
    Console.WriteLine(uriAddress.AbsolutePath); //qq_36330228/article/details/70212771
    Console.WriteLine(uriAddress.Query);        //?id=1&name=zs
    Console.WriteLine(uriAddress.Fragment);     //#search

    推荐文章

    展开全文
  • JAVA中的URI,URL,URN(转)

    千次阅读 2016-07-03 01:22:07
    本文分析了URI、URL和URN的概念,以及Java的URI和URL类(以及与URL相关的类),并演示了如何在程序中使用这些类。 Internet被认为是全球的实际和抽象的资源的集合。实际的资源包括从文件(file)到人(person),...
    原文地址:http://eastsun.javaeye.com/blog/37013

    URI
    URL URN 是识别、定位和命名网上资源的标准途径。本文分析了 URI URL URN 的概念,以及 Java URI URL 类(以及与 URL 相关的类),并演示了如何在程序中使用这些类。

    Internet
    被认为是全球的实际和抽象的资源的集合。实际的资源包括从文件( file )到人 (person) ,抽象的资源包括数据库查询等。因为要通过多样的方式识别资源,所以需要标准的识别 Internet 资源的途径。为了满足这种需要,引入了 URI URL URN

    URI URL URN 的概念
    URI
    URI = Uniform Resource Identifier
    There are two types of URIs:  URLs and  URNs.
    See  RFC 1630: Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the WWW.
    URL
    URL = Uniform Resource Locator
    See  RFC 1738: Uniform Resource Locators (URL)
    URN
    URN = Uniform Resource Name.

    URI
    URL URN 是彼此关联的。 URI 位于顶层, URL URN 的范畴位于底层。 URL URN 都是 URI 的子范畴。

    URI
    翻译为统一资源标识,它是以某种标准化的方式标识资源的字符串。这种字符串以 scheme 开头,语法如下:

    [scheme:] scheme-specific-part

    URI
    scheme 和冒号开头。冒号把 scheme scheme-specific-part 分开,并且 scheme-specific-part 的语法由 URI scheme 决定。例如 http://www.cnn.com ,其中 http scheme //www.cnn.com  scheme-specific-part

    URI 分为绝对( absolute )或相对( relative )两类。绝对 URI 指以 scheme (后面跟着冒号)开头的 URI 。前面提到的 http://www.cnn.com 就是绝对的 URI 的一个例子,其它的例子还有 mailto:jeff@javajeff.com news:comp.lang.java.help xyz://whatever 。可以把绝对 URI 看作是以某种方式引用某种资源,而对环境没有依赖。如果使用文件系统作类比,绝对 URI 类似于从根目录开始的某个文件的路径。相对 URI 不以 scheme 开始,一个例子是 articles/articles.html 。可以把相对 URI 看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。如果用文件系统作类比,相对 URI 类似于从当前目录开始的文件路径。
     
    URI 可以进一步分为不透明的( opaque )和分层( hierarchical )的两类。不透明的 URI scheme-specific-part 不是以‘ / ’开头的绝对的 URI 。其例子有 news:comp.lang.java 和前面的 mailto:jeff@javajeff.com 。不透明的 URI 不能做进一步的解析,不需要验证 scheme-specific-part 的有效性。与它不同的是,分层的 URI 是以‘ / ’开头的绝对的 URI 或相对的 URL 。分层的 URI scheme-specific-part 必须被分解为几个组成部分。分层的 URI scheme-specific-part 必须符合下面的语法:

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

    可选的授权机构( authority )标识了该 URI 名字空间的命名机构。如果有这一部分则以‘ // ’开始。它可以是基于服务器或基于授权机构的。基于授权机构有特定的语法(本文没有讨论,因为很少使用它),而基于服务器的语法如下:

    [userinfo@] host [:port]

    基于服务器的 authority 以用户信息(例如用户名)开始,后面跟着一个 @ 符号,紧接着是主机的名称,以及冒号和端口号。例如 jeff@x.com:90 就是一个基于服务器的 authority ,其中 jeff 为用户信息, x.com 为主机, 90 为端口。

    可选的 path 根据 authority (如果提供了)或 schema (如果没有 authority )定义资源的位置。路径( path )可以分成一系列的路径片断( path segment ),每个路径片断使用‘ / ’与其它片断隔开。如果第一个路径片断以‘ / ’开始,该路径就被认为是绝对的,否则路径就被认为是相对的。例如, /a/b/c 由三个路径片断 a b c 组成,此外这个路径是绝对的,因为第一个路径片断( a )的前缀是‘ / ’。

    可选的 query 定义要传递给资源的查询信息。资源使用该信息获取或生成其它的的数据传递回调用者。例如, http://www.somesite.net/a?x=y, x=y 就是一个 query ,在这个查询中 x 是某种实体的名称, y 是该实体的值。

    最后一个部分是 fragment 。当使用 URI 进行某种检索操作时,后面执行操作的软件使用 fragment 聚焦于软件感兴趣的资源部分。

    分析一个例子 ftp://george@x.com:90/public/notes?text=shakespeare#hamlet

    上面的 URI ftp 识别为 schema ,把 george@x.com:90 识别为基于服务器的 authority (其中 george 是用户信息, x.com 是主机, 90 是端口),把 /public/notes 识别为路径,把 text=shakespeare 识别为查询,把 hamlet 识别为片断。本质上它是一个叫做 george 的用户希望通过 /public/notes 路径在服务器 x.com 90 端口上检索 shakespeare 文本的 hamlet 信息。
     
    URI 的标准化( normalize

    标准化可以通过目录术语来理解。假定目录
    x 直接位于根目录之下, x 有子目录 a b b 有文件 memo.txt a 是当前目录。为了显示 memo.txt 中的内容,你可能输入 type \x\.\b\memo.txt 。你也可能输入 type \x\a\..\b\memo.txt ,在这种情况下, a .. 的出现是没有必要的。这两种形式都不是最简单的。但是如果输入 \x\b\memo.txt ,你就指定了最简单的路径了,从根目录开始访问 memo.txt 。最简单的 \x\b\memo.txt 路径就是标准化的路径。

    通常通过 base + relative URI 访问资源。 Base URI 是绝对 URI ,而 Relative URI 标识了与 Base URI 相对的资源。因此有必要把两种 URI 通过解析过程合并,相反地从合并的 URI 中提取 Relative URI 也是可行的。

    假定把 x://a/ 作为 Base URI ,并把 b/c 作为 Relative URI Resolve 这个相对 URI 将产生 x://a/b/c 。根据 x://a/ 相对化( Relative x://a/b/c 将产生 b/c

    URI
    不能读取 / 写入资源,这是统一的资源定位器( URL )的任务。 URL 是一种 URI ,它的 schema 是已知的网络协议,并且它把 URI 与某种协议处理程序联系起来(一种与资源通讯的读 / 写机制)。

    URI
    一般不能为资源提供持久不变的名称。这是统一的资源命名( URN )的任务。 URN 也是一种 URI ,但是全球唯一的、持久不便的,即使资源不再存在或不再使用。
     
    使用 URI

    Java 
    API 通过提供 URI 类(位于 java.net 包中),使我们在代码中使用 URI 成为可能。 URI 的构造函数建立 URI 对象,并且分析 URI 字符串,提取 URI 组件。 URI 的方法提供了如下功能: 1 )决定 URI 对象的 URI 是绝对的还是相对的; 2 )决定 URI 对象是 opaque 还是 hierarchical 3 )比较两个 URI 对象; 4 )标准化( normalize URI 对象; 5 )根据 Base URI 解析某个 Relative URI 6 )根据 Base URI 计算某个 URI 的相对 URI 7 )把 URI 对象转换为 URL 对象。
    URI 里面有多个构造函数,最简单的是 URI(String uri) 。这个构造函数把 String 类型的参数 URI 分解为组件,并把这些组件存储在新的 URI 对象中。如果 String 对象的 URI 违反了 RFC 2396 的语法规则,将会产生一个 java.net.URISyntaxException

    下面的代码演示了使用 URI(String uri) 建立 URI 对象:
    URI uri = new URI ("http://www.cnn.com");

    如果知道 URI 是有效的,不会产生 URISyntaxException ,可以使用静态的 create(String uri) 方法。这个方法分解 uri ,如果没有违反语法规则就建立 URI 对象,否则将捕捉到一个内部 URISyntaxException ,并把该对象包装在一个 IllegalArgumentException 中抛出。
    下面的代码片断演示了 create(String uri)
    URI uri = URI.create ("http://www.cnn.com");

    URI 构造函数和 create(String uri) 方法试图分解出 URI authority 的用户信息、主机和端口部分。对于正确形式的字符串会成功,对于错误形式的字符串,他们将会失败。如果想确认某个 URI authority 是基于服务器的,并且 分解出用户信息、主机和端口,这时候可以调用 URI parseServerAuthority() 方法。如果成功分解出 URI ,该方法将返回包含用户信息、主机和端口部分的新 URI 对象,否则该方法将产生一个 URISyntaxException

    下面的代码片断演示了 parseServerAuthority()
    //  下面的 parseServerAuthority() 调用出现后会发生什么情况?
    URI uri = new URI ("//foo:bar").parseServerAuthority();
     
    一旦拥有了 URI 对象,你就可以通过调用 getAuthority() getFragment() getHost() getPath() getPort() getQuery() getScheme() getSchemeSpecificPart()  getUserInfo() 方法提取信息。以及 isAbsolute() isOpaque() 等方法。

    程序 1: URIDemo1.java
    import java.net.*;

    public class URIDemo1 {
     public static void main (String [] args) throws Exception {
        if (args.length != 1) {
          System.err.println ("usage: java URIDemo1 uri");
          return;
        }
        URI uri = new URI (args [0]);

        System.out.println ("Authority = " +uri.getAuthority ());
        System.out.println ("Fragment = " +uri.getFragment ());
        System.out.println ("Host = " +uri.getHost ());
        System.out.println ("Path = " +uri.getPath ());
        System.out.println ("Port = " +uri.getPort ());
        System.out.println ("Query = " +uri.getQuery ());
        System.out.println ("Scheme = " +uri.getScheme ());
        System.out.println ("Scheme-specific part = " + uri.getSchemeSpecificPart ());
        System.out.println ("User Info = " +uri.getUserInfo ());
        System.out.println ("URI is absolute: " +uri.isAbsolute ());
        System.out.println ("URI is opaque: " +uri.isOpaque ());
     }
    }

    输入 java URIDemo1 命令后,输出结果如下:
    query://jeff@books.com:9000/public/manuals/appliances?stove#ge
    Authority = jeff@books.com:9000
    Fragment = ge
    Host = books.com
    Path = /public/manuals/appliances
    Port = 9000
    Query = stove
    Scheme = query
    Scheme-specific part = //jeff@books.com:9000/public/manuals/appliances?stove
    User Info = jeff
    URI is absolute: true
    URI is opaque: false


    URI 类支持基本的操作,包括标准化( normalize )、分解( resolution )和相对化( relativize )。下例演示了 normalize() 方法。

    程序 2: URIDemo2.java
    import java.net.*;

    class URIDemo2 {
     public static void main (String [] args) throws Exception {
        if (args.length != 1) {
          System.err.println ("usage: java URIDemo2 uri");
          return;
        }
        URI uri = new URI (args [0]);
        System.out.println ("Normalized URI = " + uri.normalize());
     }
    }

    在命令行输入 java URIDemo2 x/y/../z/./q ,将看到下面的输出:
    Normalized URI = x/z/q

    上面的输出显示 y .. . 消失了。

    URI 通过提供 resolve(String uri) resolve(URI uri) relativize(URI uri) 方法支持反向解析和相对化操作。如果指定的 URI 违反了 RFC 2396 语法规则, resolve(String uri) 通过的内部的 create(String uri) 调用间接地产生一个 IllegalArgumentException 下面 的代码演示了 resolve(String uri) relativize(URI uri)

    程序 3: URIDemo3.java
    import java.net.*;

    class URIDemo3 {
     public static void main (String [] args) throws Exception {
        if (args.length != 2) {
          System.err.println ("usage: " + "java URIDemo3 uriBase uriRelative");
          return;
        }

        URI uriBase = new URI (args [0]);
        System.out.println ("Base URI = " +uriBase);

        URI uriRelative = new URI (args [1]);
        System.out.println ("Relative URI = " +uriRelative);

        URI uriResolved = uriBase.resolve (uriRelative);
        System.out.println ("Resolved URI = " +uriResolved);

        URI uriRelativized = uriBase.relativize (uriResolved);
        System.out.println ("Relativized URI = " +uriRelativized);
     }
    }

    编译 URIDemo3 后,在命令行输入 java URIDemo3 http://www.somedomain.com/ x/../y ,输出如下:
    Base URI = http://www.somedomain.com/
    Relative URI = x/../y
    Resolved URI = http://www.somedomain.com/y
    Relativized URI = y


    使用 URL

    Java
    提供了 URL 类,每一个 URL 对象都封装了资源标识符和协议处理程序。获得 URL 对象的途径之一是调用 URI toURL() 方法,也可以直接调用 URL 的构造函数来建立 URL 对象。

    URL 类有多个构造函数。其中最简单的是 URL(String url) ,它有一个 String 类型的参数。如果某个 URL 没有包含协议处理程序或该 URL 的协议是未知的,其它的构造函数会产生一个 java.net.MalformedURLException
    下面的代码片断演示了使用 URL(String url) 建立一个 URL 对象,该对象封装了一个简单的 URL 组件和 http 协议处理程序。
    URL url = new URL ("http://www.informit.com");

    一旦拥有了 URL 对象,就可以使用 getAuthority() getDefaultPort()  getFile() getHost()  getPath() getPort() getProtocol() getQuery() getRef() getUserInfo() getDefaultPort() 等方法提取各种组件。如果 URL 中没有指定端口, getDefaultPort() 方法返回 URL 对象的协议默认端口。 getFile() 方法返回路径和查询组件的结合体。 getProtocol() 方法返回资源的连接类型(例如 http mailto ftp )。 getRef() 方法返回 URL 的片断。最后, getUserInfo() 方法返回 Authority 的用户信息部分。还可以调用 openStream() 方法得到 java.io.InputStream 引用。使用这种引用,可以用面向字节的方式读取资源。
     
     
    下面是 URLDemo1 的代码。该程序建立一个 URL 对象,调用 URL 的各种方法来检索该 URL 的信息,调用 URL openStream() 方法打开与资源的连接并读取 / 打印这些字节。

    程序 4: URLDemo1.java
    import java.io.*;
    import java.net.*;

    class URLDemo1 {
     public static void main (String [] args) throws IOException {
        if (args.length != 1) {
        System.err.println ("usage: java URLDemo1 url");
        return;
        }

        URL url = new URL (args [0]);

        System.out.println ("Authority = "+ url.getAuthority ());
        System.out.println ("Default port = " +url.getDefaultPort ());
        System.out.println ("File = " +url.getFile ());
        System.out.println ("Host = " +url.getHost ());
        System.out.println ("Path = " +url.getPath ());
        System.out.println ("Port = " +url.getPort ());
        System.out.println ("Protocol = " +url.getProtocol ());
        System.out.println ("Query = " +url.getQuery ());
        System.out.println ("Ref = " +url.getRef ());
        System.out.println ("User Info = " +url.getUserInfo ());

        System.out.print ('\n');

        InputStream is = url.openStream ();

        int ch;
        while ((ch = is.read ()) != -1) {
          System.out.print ((char) ch);
        }
        is.close ();
     }
    }

    在命令行输入 java URLDemo1 http://www.javajeff.com/articles/articles/html 后,上面的代码的输出如下:
    Authority = http://www.javajeff.com
    Default port = 80
    File = /articles/articles.html
    Host = http://www.javajeff.com
    Path = /articles/articles.html
    Port = -1
    Protocol = http
    Query = null
    Ref = null
    User Info = null



    URL openStream() 方法返回的 InputStream 类型,这意味着你必须按字节次序读取资源数据,这种做法是恰当的,因为你不知道将要读取的数据是什么类型。如果你事先知道要读取的数据是文本,并且每一行以换行符( \n )结束,你就可以按行读取而不是按字节读取数据了。

    下面的代码片断演示了把一个 InputStream 对象包装进 InputStreamReader 以从 8 位过渡到 16 位字符,进而把结果对象包装进 BufferedReader 以调用其 readLine() 方法。
     
    InputStream is = url.openStream ();
    BufferedReader br = new BufferedReader (new InputStreamReader (is));
    String line;
    while ((line = br.readLine ()) != null) {
    System.out.println (line);
    }
    is.close ();

    有时候按字节的次序读取数据并不方便。例如,如果资源是 JPEG 文件,那么获取一个图像处理过程并向该过程注册一个用户使用数据的方法更好。如果出现这种情况,你就有必要使用 getContent() 方法。

    当调用 getContent() 方法时,它会返回某种对象的引用,而你可以调用该对象的方法(在转换成适当的类型后),采用更方便的方式取得数据。但是在调用该方法前,最好使用 instanceof 验证对象的类型,防止类产生异常。

    对于 JPEG 资源, getContent() 返回一个对象,该对象实现了 java.awt.Image.ImageProducer 接口。下面的代码演示了使用如何 getContent()
    URL url = new URL (args [0]);
    Object o = url.getContent ();
    if (o instanceof ImageProducer) {
     ImageProducer ip = (ImageProducer) o;
     // ...
    }


    查看一下 getContent() 方法的源代码,你会找到 openConnection().getContent() URL openConnection() 方法返回一个 java.net.URLConnection 对象。 URLConnection 的方法反映了资源和连接的细节信息,使我们能编写代码访问资源。

    下面 URLDemo2 代码演示了 openConnection() ,以及如何调用 URLConnection 的方法。

    程序 5: URLDemo2.java
    import java.io.*;
    import java.net.*;
    import java.util.*;

    class URLDemo2 {
     public static void main (String [] args) throws IOException {
        if (args.length != 1) {
          System.err.println ("usage: java URLDemo2 url");
          return;
        }

        URL url = new URL (args [0]);

        // 
    返回代表某个资源的连接的新的特定协议对象的引用
        URLConnection uc = url.openConnection ();

        // 
    进行连接
        uc.connect ();

        // 
    打印 header 的内容
        Map m = uc.getHeaderFields ();
        Iterator i = m.entrySet ().iterator ();
        while (i.hasNext ()) {
          System.out.println (i.next ());
        }
        // 
    检查是否资源允许输入和输出操作
        System.out.println ("Input allowed = " +uc.getDoInput ());
        System.out.println ("Output allowed = " +uc.getDoOutput ());
     }
    }
     
     
    URLConnection getHeaderFields() 方法返回一个 java.util.Map 。该 map 包含 header 名称和值的集合。 header 是基于文本的名称 / 值对,它识别资源数据的类型、数据的长度等等。

    编译 URLDemo2 后,在命令行输入 java URLDemo2 http://www.javajeff.com ,输出如下:
    Date=[Sun, 17 Feb 2002 17:49:32 GMT]
    Connection=[Keep-Alive]
    Content-Type=[text/html; charset=iso-8859-1]
    Accept-Ranges=[bytes]
    Content-Length=[7214]
    null=[HTTP/1.1 200 OK]
    ETag=["4470e-1c2e-3bf29d5a"]
    Keep-Alive=[timeout=15, max=100]
    Server=[Apache/1.3.19 (Unix) Debian/GNU]
    Last-Modified=[Wed, 14 Nov 2001 16:35:38 GMT]
    Input allowed = true
    Output allowed = false


    仔细看一下前面的输出,会看到叫做 Content-Type 的东西。 Content-Type 识别了资源数据的类型是 text/html text 部分叫做类型, html 部分叫做子类型。如果内容是普通的文本, Content-Type 的值可能是 text/plain text/html 表明内容是文本的但是 html 格式的。
     
    Content-Type 是多用途 Internet 邮件扩展( MIME )的一部分。 MIME 是传统的传输消息的 7 ASCII 标准的一种扩展。通过引入了多种 header MIME 使视频、声音、图像、不同字符集的文本与 7 ASCII 结合起来。当使用 URLConnection 类的时候,你会遇到 getContentType() getContentLength() 。这些方法返回的值是 Content-Type Content
    展开全文
  • android uri获取文件名

    千次阅读 2020-05-08 17:32:14
    从android11开始,文件只能通过uri操作,包括获取文件名 var displayName = "" val query = context.contentResolver.query(uri, null, null, null, null, null) query?.use { it.moveToFirst() displayName = ...

    从android11开始,文件只能通过uri操作,包括获取文件名

    参考:https://developer.android.google.cn/training/data-storage/shared/documents-files#kotlin

     

        fun uriToFileName(uri:Uri,context: Context):String{
            return when(uri.scheme){
                ContentResolver.SCHEME_FILE -> uri.toFile().name
                ContentResolver.SCHEME_CONTENT->{
                    val cursor = context.contentResolver.query(uri, null, null, null, null, null)
                    cursor?.let {
                        it.moveToFirst()
                        val displayName = it.getString(it.getColumnIndex(OpenableColumns.DISPLAY_NAME))
                        cursor.close()
                        displayName
                    }?:"${System.currentTimeMillis()}.${MimeTypeMap.getSingleton().getExtensionFromMimeType(context.contentResolver.getType(uri))}}"
    
                }
                else -> "${System.currentTimeMillis()}.${MimeTypeMap.getSingleton().getExtensionFromMimeType(context.contentResolver.getType(uri))}}"
            }
        }

     

    展开全文
  • Android Uri.parse的详细资料

    万次阅读 2018-10-26 15:55:08
    分清 URI、URL 和 URN 简单的说:www.baidu.com 是URI,www.google.com/cn,有/就是URL。 1.什么是URI Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过通 用资源标志符(Universal Resource ...

    分清 URI、URL 和 URN
    简单的说:www.baidu.com 是URI,www.google.com/cn,有/就是URL。
    1.什么是URI
    Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过通
    用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。 
    URI一般由三部分组成:
    访问资源的命名机制。 
    存放资源的主机名。 
    资源自身的名称,由路径表示。 
    考虑下面的URI,它表示了当前的HTML 4.0规范: 
         http://www.webmonkey.com.cn/html/html40/
    这个URI是这样的:这是一个可通过HTTP协议访问的资源,位于主
    机www.webmonkey.com.cn上,通过路径“/html/html40”访问。在HTML文档中
    其它资源包括"mailto"(收发email)和"ftp"(FTP访问)。 
    这是URI的另一个例子,指向一个用户的邮箱:
    <A href="Joe'>mailto:joe@someplace.com">Joe Cool</A>
    注:大多数读者可能熟悉"URL",而不是URI。URL是URI命名机制的一个子集。
    片段标志符
    有的URI指向一个资源的内部。 这种URI以"#"结束,并跟着一个anchor标志
    符(称为片段标志符)。例如,下面是一个指向section_2的URI:
    http://somesite.com/html/top.htm#section_2
    相对URI
    相对URI 不包含任何命名规范信息。它的路径通常指同一台机器上的资源。相对URI可能含有相对路径(如,“..”表示上一层路径),还可能包含片段标
    志符。
    为了说明相对URI,假设我们有一个基本的URI http://www.acme.com/support/intro.htm
    下面的链接中使用了相对URI:
         <A href="suppliers.htm">Suppliers</A>
    它扩展成完全的URI就是 "http://www.acme.com/support/suppliers.htm", 
    下面是一个图像的相对URI:
         <IMG src="../icons/logo.gif" alt="logo">
    它扩展成完全的URI就是 "http://www.acme.com/icons/logo.gif"。
    在HTML中,URI被用来:
    链接到另一个文档或资源(参看A和LINK元素)。 
    链接到一个外部样式表或脚本(参看LINK和SCRIPT元素)。 
    在页内包含图像、对象或applet(参看IMAG、OBJECT、APPLET和INPUT
    元素)。 
    建立图像映射(参看MAP和AREA元素)。 
    提交一个表单(参看FORM)。 
    建立一个框架文档(参看FRAME和IFRAME元素)。 
    引用一个外部参考(参看Q、BLOCKQUOTE, INS和DEL元素)。 
    指向一个描述文档的metadata(参看HEAD元素)。

    2.什么是URL:
          URL是Uniform ResourceLocation的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。 
    ◇ URL的格式
    URL的格式由下列三部分组成: 
    第一部分是协议(或称为服务方式); 
    第二部分是存有该资源的主机IP地址(有时也包括端口号); 
    第三部分是主机资源的具体地址。,如目录和文件名等。 
    第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
    ◇ URL示例 
    文件的URL: 
    用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。
    例一:file://ftp.yoyodyne.com/pub/files/foobar.txt
    代表存放主机ftp.yoyodyne.com上的pub/files/目录下的一个文件,文件名是foobar.txt。
    例二:file://ftp.yoyodyne.com/pub
    代表主机ftp.yoyodyne.com上的目录/pub。
    例三:file://ftp.yoyodyne.com/
    代表主机ftp.yoyodyne.com上的根目录。
    Gopher的URL: 
    Gopher服务器有可能使用特殊的端口,在这种情况下,主机IP地址与端口之间要用“:隔开。
    例一:gopher://gopher.yoyodyne.com/
    表示主机gopher.yoyodyne.com上的gopher服务器。
    例二:gopher://gopher.banzai.edu:1234
    表示主机gopher.banzai.edu上的gopher服务器,在端口1234上。
    网络新闻的URL: 
    利用URL表示网络新闻组时,如果是usenet的话只要指定出新闻组的名字即可。
    例如:news:rec.gardening
    表示usenet上的rec.gardening新闻组(园艺)。
    HTTP的 URL:
    使用超级文本传输协议HTTP,提供超级文本信息服务的资源。
    例一:http://www.peopledaily.com.cn/channel/welcome.htm
    其计算机域名为www.peopledaily.com.cn。超级文本文件(文件类型为.html)是在目录/channel下的welcome.htm。这是中国人民日报的一台计算机。
    例二:http://www.rol.cn.net/talk/talk1.htm
    其其计算机域名为www.rol.cn.net。超级文本文件(文件类型为.html)是在目录/talk下的talk1.htm。这是瑞得聊天室的地址,可由此进入瑞得聊天室的第1室。

    URI、URL和URN之间的区别与联系
    URI:Uniform Resource Identifier,统一资源标识符;
    URL:Uniform Resource Locator,统一资源定位符;
    URN:Uniform Resource Name,统一资源名称。
    其中,URL,URN是URI的子集。
    Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式:
    URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。
    URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。
    URI是以某种统一的(标准化的)方式标识资源的简单字符串。
    URI一般由三部分组成:
    1. 访问资源的命名机制。 
    2. 存放资源的主机名。 
    3. 资源自身的名称,由路径表示。 
    典型情况下,这种字符串以scheme(命名URI的名字空间的标识符——一组相关的名称)开头,语法如下:
    [scheme:] scheme-specific-part 
    URI以scheme和冒号开头。Scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由URI的名字空间决定。如下面的例子:
    http://www.cnn.com,其中http是scheme,//www.cnn.com是 scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。
    URI有绝对和相对之分,绝对的URI指以scheme(后面跟着冒号)开头的URI。前面提到的http://www.cnn.com就是绝对的URI的一个例子,其它的例子还有mailto:jeff@javajeff.com、news:comp.lang.java.help和xyz://whatever。你可以把绝对的URI看作是以某种方式引用某种资源,而这种方式对标识符出现的环境没有依赖。如果使用文件系统作类比,绝对的URI类似于从根目录开始的某个文件的径。 
    与绝对的URI不同的,相对的URI不是以scheme(后面跟着冒号)开始的URI。它的一个例子是articles/articles.html。你可以把相对的URI看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。如果用文件系统作类比,相对的URI类似于从当前目录开始的文件路径。
    URL是Uniform ResourceLocation的缩写,译为"统一资源定位符"。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。 
    URL的格式由下列三部分组成: 
    第一部分是协议(或称为服务方式); 
    第二部分是存有该资源的主机IP地址(有时也包括端口号); 
    第三部分是主机资源的具体地址。,如目录和文件名等。 
    第一部分和第二部分之间用"://"符号隔开,第二部分和第三部分用"/"符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
    目前最大的缺点是当信息资源的存放地点发生变化时,必须对URL作相应的改变。因此人们正在研究新的信息资源表示方法,例如:URI(UniversalResource Identifier)即"通用资源标识"(参见RFC 1630)、URN(Uniform ResourceName)即"统一资源名"和URC(Uniform Resource Citation)即"统一资源引用符"等。
    URI目前还处在进一步的研究当中。研究的方向就是弥补URL目前存在的缺点。
    parse方法返回的是一个URI类型,通过这个URI可以访问一个网络上或者是本地的资源
    1,调web浏览器 
    Uri myBlogUri = Uri.parse("http://www.baidu.com"); 
    returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri); 
    2,地图 
    Uri mapUri = Uri.parse("geo:38.899533,-77.036476"); 
    returnIt = new Intent(Intent.ACTION_VIEW, mapUri); 
    3,调拨打电话界面 
    Uri telUri = Uri.parse("tel:100861"); 
    returnIt = new Intent(Intent.ACTION_DIAL, telUri); 
    4,直接拨打电话 
    Uri callUri = Uri.parse("tel:100861"); 
    returnIt = new Intent(Intent.ACTION_CALL, callUri); 
    5,卸载 
    Uri uninstallUri = Uri.fromParts("package", "xxx", null); 
    returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri); 
    6,安装 
    Uri installUri = Uri.fromParts("package", "xxx", null); 
    returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); 
    7,播放 
    Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3"); 
    returnIt = new Intent(Intent.ACTION_VIEW, playUri); 
    8,调用发邮件 
    Uri emailUri = Uri.parse("mailto:xxxx@gmail.com"); 
    returnIt = new Intent(Intent.ACTION_SENDTO, emailUri); 
    9,发邮件 
    returnIt = new Intent(Intent.ACTION_SEND); 
    String[] tos = { "xxxx@gmail.com" }; 
    String[] ccs = { "xxxx@gmail.com" }; 
    returnIt.putExtra(Intent.EXTRA_EMAIL, tos); 
    returnIt.putExtra(Intent.EXTRA_CC, ccs); 
    returnIt.putExtra(Intent.EXTRA_TEXT, "body"); 
    returnIt.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
    returnIt.setType("message/rfc882"); 
    Intent.createChooser(returnIt, "Choose Email Client"); 
    10,发短信 
    Uri smsUri = Uri.parse("tel:100861"); 
    returnIt = new Intent(Intent.ACTION_VIEW, smsUri); 
    returnIt.putExtra("sms_body", "yyyy"); 
    returnIt.setType("vnd.android-dir/mms-sms"); 
    11,直接发邮件 
    Uri smsToUri = Uri.parse("smsto://100861"); 
    returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri); 
    returnIt.putExtra("sms_body", "yyyy"); 
    12,发彩信 
    Uri mmsUri = Uri.parse("content://media/external/images/media/23"); 
    returnIt = new Intent(Intent.ACTION_SEND); 
    returnIt.putExtra("sms_body", "yyyy"); 
    returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri); 
    returnIt.setType("image/png");

    13,与market相关:

    1 //寻找某个应用
    Uri uri = Uri.parse("market://search?q=pname:pkg_name");
    Intent it = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(it);
    //where pkg_name is the full package path for an application
     
    2 //显示某个应用的相关信息
    Uri uri = Uri.parse("market://details?id=app_id");
    Intent it = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(it);
    //where app_id is the application ID, find the ID
    //by clicking on your application on Market home
    //page, and notice the ID from the address bar
    14,路径规划
    Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
    Intent it = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(it);
    //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456
    15,安装指定apk
    public void setupAPK(String apkname){
        String fileName = Environment.getExternalStorageDirectory() + "/" + apkname;
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(fileName)),"application/vnd.android.package-archive");
        mService.startActivity(intent);
    }
    16,进入联系人界面
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(People.CONTENT_URI);
    startActivity(intent);
    17,查看指定联系人
    Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);// info.id联系人ID
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(personUri);
    startActivity(intent);
    18,调用相册
    public static final String MIME_TYPE_IMAGE_JPEG = "image/*";
    public static final int ACTIVITY_GET_IMAGE = 0;
    Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
    getImage.addCategory(Intent.CATEGORY_OPENABLE);
    getImage.setType(MIME_TYPE_IMAGE_JPEG);
    startActivityForResult(getImage, ACTIVITY_GET_IMAGE);
    19,调用系统相机程序,并存储照片
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    time = Calendar.getInstance().getTimeInMillis();
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
    .getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg")));
    startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);

    展开全文
  • URI 通用资源标识符 网络上有很多关于 URI 与 URL 之间关系和区别错误的见解,事实上,URI 是一个给程序提供资源标识的框架,任何程序都可以使用它来标识自己的资源。先来看看他的结构 URI = scheme : [[userinfo@]...
  • uri

    千次阅读 2013-08-04 17:39:07
    - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。 URI一般由三部分组成: 一、主机名。 存放资源的自身的名称,由路径表示。 参考下面的URI,它符合当前的RFC4395规范:协议名称://域名...
  • 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; #...
  • Android10/11 Uri与真实路径转换--全适配

    千次阅读 热门讨论 2020-07-26 00:17:16
    * 根据Uri获取文件绝对路径,解决Android4.4以上版本Uri转换 * * @param context * @param imageUri */ public static String getFileAbsolutePath(Context context, Uri imageUri) { if (context == null ||...
  • nim-datauri:数据URI Base64 UTF-8 Nim模块
  • URI与URL,Android中的Uri的区别

    千次阅读 2017-09-17 10:35:01
    首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,...而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-ne
  • 参考博客:关于URL跟URI的区别,个人见解 - J2EE 关于URL和URI的区别,个人见解。 初学java,最近被一个概念搞得头晕脑胀,就是url和uri的概念和区别,网上查了一大通,发现各种回答眼花缭乱,有百科直接粘贴的,有...
  • System.URI类 - 获取URI的各种属性

    千次阅读 2018-11-21 22:17:13
    System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类。 一、属性 AbsolutePath 获取 URI 的绝对路径。 AbsoluteUri 获取绝对 URI。 ...
  • HTTP之URI & URL

    2018-08-26 08:11:48
    URI(Uniform Resource Identifier 统一资源标识符) URL(Uniform Resource Locator 统一资源定位符)
  • URL与URI

    千次阅读 2019-04-23 22:14:28
    URL与URI 而URL是uniform resource locator,统一资源定位器 URI,是uniform resource identifier,统一资源标识符 1、URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。URL是一种...
  • 网络的URL, URI ,URN URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Locator 统一资源定位符 URN = Universal Resource Name 统一资源名称 URL代表资源的路径地址,URI代表资源...
  • URI

    2014-08-15 09:36:37
    - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。 目录 1组成 2使用 3区别 4与URN ▪ 技术观点 ▪ RFC 3305 5相关介绍 ▪ 发展 ▪ ...
  • URI Template Patterns

    千次阅读 2015-08-10 10:37:17
    URI模板是一个类似于URI的String,包含一个或者多个参数名字。例如,URI模板是以下的情况:http://www.example.com/users/{userId}包含了变量userId, 如果通过这样的一个URI去访问...
  • java URI,URL使用

    万次阅读 2012-09-03 20:16:03
    Java中URI,URL和URN的使用 从天极网抄录整理 2006-1-13   URI、URL和URN是识别、定位和命名网上资源的标准途径。本文分析了URI、URL和URN的概念,以及Java的URI和URL类(以及与URL相关的类),并演示了如何在...
  • URI的子集URL和URN

    2019-01-14 10:30:58
    URI:Uniform Resource Identifier,即统一资源标志符,用来唯一的标识一个资源。 URL:Uniform Resource Locator,统一资源定位符。...即通过名字来表示资源的。 URL肯定是一个URI,但是一个URI并不一定是一个UR...
  • 在gateway中配置uri配置有三种方式,包括 第一种:ws(websocket)方式: uri: ws://localhost:9000 第二种:http方式: uri: ...第三种:lb(注册中心中服务名字)方式: uri: lb://brilliance-consumer
  • uri和url的区别与联系(一看就理解)

    千次阅读 多人点赞 2019-10-17 15:07:06
    uri和url一直对这个概念很模糊,因此专门写了一个笔记来彻底搞清楚。(先说好这个笔记的主要作用就是为了便于理解和区分uri和url,这也是我个人的理解和总结,如果有不到位的地方可以提出。如果能帮助你区分了这两个...
  • URI、URL和URN三者关系

    2020-09-25 11:29:14
    统一资源标志符(Uniform Resource Identifier)URI 统一资源定位符(uniform resource location)URL
  • Android intent URI跳转以及参数拼接

    千次阅读 2020-03-30 21:41:03
    另一种就是uri的方式。 方式一:intent传参,将参数放到bundle中,如下例子中,有一个playInfo的key里面有一个JSONObject的字符串: Intent intent = new Intent(ACTION_DETAIL); Bundle bundle = new ...
  • URL和URI区别

    2017-07-04 15:40:52
    URI,URL,URN从上面的那幅图可以看出来,一共有三个不同的概念URI,URL,URN。这讨论这样的问题时,最好的方法就是回到原点啊,这里我们在RFC 3986: Uniform Resource Identifier (URI): Generic Syntax里面收集了点...
  • android 通过URI获取文件名称Title

    千次阅读 2016-06-15 23:35:59
    该功能弄了整整一下午算是实现了,但在代码过程中遇一个难点,无法通过设定为铃声的Uri路径获取该 URI路径文件的名称,抓头挠耳想了很久也没有任何进展,不得不换了另一种繁琐的方法来迂回实现,但另该方法终究还是...
  • HTTP协议中的URI和URL有什么区别? ...URI:Universal Resource Identifier 统一资源标识符 URL:Universal Resource Locator 统一资源定位符 ...假设人的名字是不能重复的,则名字就是URI的一个实例。然而名字是会重
  • 1、request.getRequestURL() 返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数。 2、request.getRequestURI() 得到的是request URL的部分值,并且web容器没有decode过的 3、...
  • URI和URL的区别

    2020-07-13 23:43:48
    1.什么是URIURI的全称是:统一资源标识符 web上存在着许多的资源,比如说有文本,有图片,有代码等等各种类型的数据,那我们怎么在繁多的数据里面找出自己想要的数据呢? 有一个方法就是我们可以给每个数据加上...
  • Uri与URL

    2017-03-30 17:28:53
    URI,URL,URN从上面的那幅图可以看出来,一共有三个不同的概念URI,URL,URN。URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。 而URL是uniform resource locator,统一资源定位器,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,772
精华内容 45,508
关键字:

uri名字