Class UrlKit

java.lang.Object
org.miaixz.bus.core.xyz.UrlKit

public class UrlKit extends Object
URL(Uniform Resource Locator)统一资源定位符相关工具类

统一资源定位符,描述了一台特定服务器上某资源的特定位置。

URL组成:
   协议://主机名[:端口]/ 路径/[:参数] [?查询]#Fragment
   protocol :// hostname[:port] / path / [:parameters][?query]#fragment
 
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static String
    buildQuery(Map<String,?> paramMap, Charset charset)
    将Map形式的Form表单数据转换为Url参数形式 paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("") 会自动url编码键和值
    static String
    completeUrl(String baseUrl, String relativePath)
    补全相对路径
    static Map<String,String>
    decodeQuery(String paramsStr, Charset charset)
    将URL参数解析为Map(也可以解析Post中的键值对参数)
    decodeQueryList(String paramsStr, Charset charset)
    将URL参数解析为Map(也可以解析Post中的键值对参数)
    static String
    encodeQuery(String urlWithParams, Charset charset)
    对URL参数做编码,只编码键和值 提供的值可以是url附带参数,但是不能只是url
    static String
    getDataUri(String mimeType, String encoding, String data)
    Data URI Scheme封装。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据, 目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。 Data URI的格式规范:
    static String
    getDataUri(String mimeType, Charset charset, String encoding, String data)
    Data URI Scheme封装。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据, 目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。 Data URI的格式规范:
    static String
    getDataUriBase64(String mimeType, String data)
    Data URI Scheme封装,数据格式为Base64。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据, 目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。 Data URI的格式规范:
    static String
    从URL对象中获取不被编码的路径Path 对于本地路径,URL对象的getPath方法对于包含中文或空格时会被编码,导致本读路径读取错误。 此方法将URL转为URI后获取路径用于解决路径被编码的问题
    static URI
    getHost(URL url)
    获取URL中域名部分,只保留URL中的协议(Protocol)、Host,其它为null。
    static String
    getPath(String uriStr)
    获得path部分
    getReader(URL url, Charset charset)
    获得Reader
    从URL中获取流
    static URI
    获取string协议的URL,类似于string:///xxxxx
    static URL
    getURL(File file)
    获得URL,常用于使用绝对路径时的情况
    static URL
    getURL(String pathBaseClassLoader)
    获得URL
    static URL
    getURL(String path, Class<?> clazz)
    获得URL
    static URL
    getURL(URL url, String relativePath)
    获取相对于给定URL的新的URL 来自:org.springframework.core.io.UrlResource#createRelativeURL
    static URL[]
    getURLs(File... files)
    获得URL,常用于使用绝对路径时的情况
    static String
    标准化URL字符串,包括: 自动补齐“http://”头 去除开头的\或者/ 替换\为/
    static String
    normalize(String url, boolean isEncodePath)
    标准化URL字符串,包括: 自动补齐“http://”头 去除开头的\或者/ 替换\为/
    static String
    normalize(String url, boolean isEncodePath, boolean replaceSlash)
    标准化URL字符串,包括: 自动补齐“http://”头 去除开头的\或者/ 替换\为/ 如果replaceSlash为true,则替换多个/为一个
    static String
    normalizeQuery(String queryPart, Charset charset)
    标准化参数字符串,即URL中?后的部分
    static long
    size(URL url)
    获取URL对应数据长度 如果URL为文件,转换为文件获取文件长度。 其它情况获取URLConnection.getContentLengthLong()
    static String
    toQuery(Map<String,?> paramMap)
    将Map形式的Form表单数据转换为Url参数形式,会自动url编码键和值
    static String
    toQuery(Map<String,?> paramMap, Charset charset)
    将Map形式的Form表单数据转换为Url参数形式 paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("") 会自动url编码键和值 此方法用于拼接URL中的Query部分,并不适用于POST请求中的表单
    static String
    toQuery(Map<String,?> paramMap, Charset charset, UrlQuery.EncodeMode encodeMode)
    将Map形式的Form表单数据转换为Url参数形式 paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("") 会自动url编码键和值
    static URI
    toURI(String location)
    转字符串为URI
    static URI
    toURI(String location, boolean isEncode)
    转字符串为URI
    static URI
    toURI(URL url)
    转URL为URI
    static URI
    toURI(URL url, boolean isEncode)
    转URL为URI
    static URL
    将URL字符串转换为URL对象,并做必要验证
    static URL
    将URL字符串转换为URL对象,并做必要验证
    static URL
    url(String url)
    通过一个字符串形式的URL地址创建URL对象
    static URL
    url(String url, URLStreamHandler handler)
    通过一个字符串形式的URL地址创建URL对象
    static URL
    url(URI uri)
    URI转换为URL
    static void
    如果连接为JNLP方式,则打开缓存

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • UrlKit

      public UrlKit()
  • Method Details

    • url

      public static URL url(URI uri) throws InternalException
      URI转换为URL
      Parameters:
      uri - URI
      Returns:
      URL对象
      Throws:
      InternalException - MalformedURLException包装,URI格式有问题时抛出
      See Also:
    • url

      public static URL url(String url)
      通过一个字符串形式的URL地址创建URL对象
      Parameters:
      url - URL
      Returns:
      URL对象
    • url

      public static URL url(String url, URLStreamHandler handler)
      通过一个字符串形式的URL地址创建URL对象
      Parameters:
      url - URL
      handler - URLStreamHandler
      Returns:
      URL对象
    • getStringURI

      public static URI getStringURI(CharSequence content)
      获取string协议的URL,类似于string:///xxxxx
      Parameters:
      content - 正文
      Returns:
      URL
    • toUrlForHttp

      public static URL toUrlForHttp(String urlStr)
      将URL字符串转换为URL对象,并做必要验证
      Parameters:
      urlStr - URL字符串
      Returns:
      URL
    • toUrlForHttp

      public static URL toUrlForHttp(String urlStr, URLStreamHandler handler)
      将URL字符串转换为URL对象,并做必要验证
      Parameters:
      urlStr - URL字符串
      handler - URLStreamHandler
      Returns:
      URL
    • getURL

      public static URL getURL(String pathBaseClassLoader)
      获得URL
      Parameters:
      pathBaseClassLoader - 相对路径(相对于classes)
      Returns:
      URL
      See Also:
    • getURL

      public static URL getURL(String path, Class<?> clazz)
      获得URL
      Parameters:
      path - 相对给定 class所在的路径
      clazz - 指定class
      Returns:
      URL
      See Also:
    • getURL

      public static URL getURL(File file)
      获得URL,常用于使用绝对路径时的情况
      Parameters:
      file - URL对应的文件对象
      Returns:
      URL
      Throws:
      InternalException - URL格式错误
    • getURL

      public static URL getURL(URL url, String relativePath) throws InternalException
      获取相对于给定URL的新的URL 来自:org.springframework.core.io.UrlResource#createRelativeURL
      Parameters:
      url - 基础URL
      relativePath - 相对路径
      Returns:
      相对于URL的子路径URL
      Throws:
      InternalException - URL格式错误
    • getURLs

      public static URL[] getURLs(File... files)
      获得URL,常用于使用绝对路径时的情况
      Parameters:
      files - URL对应的文件对象
      Returns:
      URL
      Throws:
      InternalException - URL格式错误
    • getHost

      public static URI getHost(URL url)
      获取URL中域名部分,只保留URL中的协议(Protocol)、Host,其它为null。
      Parameters:
      url - URL
      Returns:
      域名的URI
    • completeUrl

      public static String completeUrl(String baseUrl, String relativePath)
      补全相对路径
      Parameters:
      baseUrl - 基准URL
      relativePath - 相对URL
      Returns:
      相对路径
      Throws:
      InternalException - MalformedURLException
    • getPath

      public static String getPath(String uriStr)
      获得path部分
      Parameters:
      uriStr - URI路径
      Returns:
      path
      Throws:
      InternalException - 包装URISyntaxException
    • getDecodedPath

      public static String getDecodedPath(URL url)
      从URL对象中获取不被编码的路径Path 对于本地路径,URL对象的getPath方法对于包含中文或空格时会被编码,导致本读路径读取错误。 此方法将URL转为URI后获取路径用于解决路径被编码的问题
      Parameters:
      url - URL
      Returns:
      路径
    • toURI

      public static URI toURI(URL url) throws InternalException
      转URL为URI
      Parameters:
      url - URL
      Returns:
      URI
      Throws:
      InternalException - 包装URISyntaxException
    • toURI

      public static URI toURI(URL url, boolean isEncode) throws InternalException
      转URL为URI
      Parameters:
      url - URL
      isEncode - 是否编码参数中的特殊字符(默认UTF-8编码)
      Returns:
      URI
      Throws:
      InternalException - 包装URISyntaxException
    • toURI

      public static URI toURI(String location) throws InternalException
      转字符串为URI
      Parameters:
      location - 字符串路径
      Returns:
      URI
      Throws:
      InternalException - 包装URISyntaxException
    • toURI

      public static URI toURI(String location, boolean isEncode) throws InternalException
      转字符串为URI
      Parameters:
      location - 字符串路径
      isEncode - 是否编码参数中的特殊字符(默认UTF-8编码)
      Returns:
      URI
      Throws:
      InternalException - 包装URISyntaxException
    • getStream

      public static InputStream getStream(URL url)
      从URL中获取流
      Parameters:
      url - URL
      Returns:
      InputStream流
    • getReader

      public static BufferedReader getReader(URL url, Charset charset)
      获得Reader
      Parameters:
      url - URL
      charset - 编码
      Returns:
      BufferedReader
    • normalize

      public static String normalize(String url)
      标准化URL字符串,包括:
      1. 自动补齐“http://”头
      2. 去除开头的\或者/
      3. 替换\为/
      Parameters:
      url - URL字符串
      Returns:
      标准化后的URL字符串
    • normalize

      public static String normalize(String url, boolean isEncodePath)
      标准化URL字符串,包括:
      1. 自动补齐“http://”头
      2. 去除开头的\或者/
      3. 替换\为/
      Parameters:
      url - URL字符串
      isEncodePath - 是否对URL中path部分的中文和特殊字符做转义(不包括 http:, /和域名部分)
      Returns:
      标准化后的URL字符串
    • normalize

      public static String normalize(String url, boolean isEncodePath, boolean replaceSlash)
      标准化URL字符串,包括:
      1. 自动补齐“http://”头
      2. 去除开头的\或者/
      3. 替换\为/
      4. 如果replaceSlash为true,则替换多个/为一个
      Parameters:
      url - URL字符串
      isEncodePath - 是否对URL中path部分的中文和特殊字符做转义(不包括 http:, /和域名部分)
      replaceSlash - 是否替换url body中的 //
      Returns:
      标准化后的URL字符串
    • buildQuery

      public static String buildQuery(Map<String,?> paramMap, Charset charset)
      将Map形式的Form表单数据转换为Url参数形式 paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("") 会自动url编码键和值
       key1=v1&key2=&key3=v3
       
      Parameters:
      paramMap - 表单数据
      charset - 编码,编码为null表示不编码
      Returns:
      url参数
    • getDataUriBase64

      public static String getDataUriBase64(String mimeType, String data)
      Data URI Scheme封装,数据格式为Base64。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据, 目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。 Data URI的格式规范:
           data:[<mime type>][;charset=<charset>][;<encoding>],<encoded data>
       
      Parameters:
      mimeType - 可选项(null表示无),数据类型(image/png、text/plain等)
      data - 编码后的数据
      Returns:
      Data URI字符串
    • getDataUri

      public static String getDataUri(String mimeType, String encoding, String data)
      Data URI Scheme封装。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据, 目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。 Data URI的格式规范:
           data:[<mime type>][;charset=<charset>][;<encoding>],<encoded data>
       
      Parameters:
      mimeType - 可选项(null表示无),数据类型(image/png、text/plain等)
      encoding - 数据编码方式(US-ASCII,BASE64等)
      data - 编码后的数据
      Returns:
      Data URI字符串
    • getDataUri

      public static String getDataUri(String mimeType, Charset charset, String encoding, String data)
      Data URI Scheme封装。data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据, 目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。 Data URI的格式规范:
           data:[<mime type>][;charset=<charset>][;<encoding>],<encoded data>
       
      Parameters:
      mimeType - 可选项(null表示无),数据类型(image/png、text/plain等)
      charset - 可选项(null表示无),源文本的字符集编码方式
      encoding - 数据编码方式(US-ASCII,BASE64等)
      data - 编码后的数据
      Returns:
      Data URI字符串
    • size

      public static long size(URL url)
      获取URL对应数据长度
      Parameters:
      url - URL
      Returns:
      长度
    • useCachesIfNecessary

      public static void useCachesIfNecessary(URLConnection con)
      如果连接为JNLP方式,则打开缓存
      Parameters:
      con - URLConnection
    • toQuery

      public static String toQuery(Map<String,?> paramMap)
      将Map形式的Form表单数据转换为Url参数形式,会自动url编码键和值
      Parameters:
      paramMap - 表单数据
      Returns:
      url参数
    • toQuery

      public static String toQuery(Map<String,?> paramMap, Charset charset)
      将Map形式的Form表单数据转换为Url参数形式 paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("") 会自动url编码键和值 此方法用于拼接URL中的Query部分,并不适用于POST请求中的表单
       key1=v1&key2=&key3=v3
       
      Parameters:
      paramMap - 表单数据
      charset - 编码,null 表示不encode键值对
      Returns:
      url参数
    • toQuery

      public static String toQuery(Map<String,?> paramMap, Charset charset, UrlQuery.EncodeMode encodeMode)
      将Map形式的Form表单数据转换为Url参数形式 paramMap中如果key为空(null和"")会被忽略,如果value为null,会被做为空白符("") 会自动url编码键和值
       key1=v1&key2=&key3=v3
       
      Parameters:
      paramMap - 表单数据
      charset - 编码,null表示不encode键值对
      encodeMode - 编码模式
      Returns:
      url参数
    • encodeQuery

      public static String encodeQuery(String urlWithParams, Charset charset)
      对URL参数做编码,只编码键和值 提供的值可以是url附带参数,但是不能只是url

      注意,此方法只能标准化整个URL,并不适合于单独编码参数值

      Parameters:
      urlWithParams - url和参数,可以包含url本身,也可以单独参数
      charset - 编码
      Returns:
      编码后的url和参数
    • normalizeQuery

      public static String normalizeQuery(String queryPart, Charset charset)
      标准化参数字符串,即URL中?后的部分

      注意,此方法只能标准化整个URL,并不适合于单独编码参数值

      Parameters:
      queryPart - 参数字符串
      charset - 编码
      Returns:
      标准化的参数字符串
    • decodeQuery

      public static Map<String,String> decodeQuery(String paramsStr, Charset charset)
      将URL参数解析为Map(也可以解析Post中的键值对参数)
      Parameters:
      paramsStr - 参数字符串(或者带参数的Path)
      charset - 字符集
      Returns:
      参数Map
    • decodeQueryList

      public static Map<String,List<String>> decodeQueryList(String paramsStr, Charset charset)
      将URL参数解析为Map(也可以解析Post中的键值对参数)
      Parameters:
      paramsStr - 参数字符串(或者带参数的Path)
      charset - 字符集
      Returns:
      参数Map