Module bus.core

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 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