Class UriKit

java.lang.Object
org.aoju.bus.core.toolkit.UriKit

public class UriKit extends Object
URL相关工具
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • UriKit

      public UriKit()
      构造
    • UriKit

      public UriKit(String scheme, String host, int port, UriKit.Path path, UriKit.Query query, String fragment, Charset charset)
      构造
      Parameters:
      scheme - 协议,默认http
      host - 主机,例如127.0.0.1
      port - 端口,-1表示默认端口
      path - 路径,例如/aa/bb/cc
      query - 查询,例如a=1&b=2
      fragment - 标识符例如#后边的部分
      charset - 编码,用于URLEncode和URLDecode
  • Method Details

    • of

      public static UriKit of()
      创建空的
      Returns:
      this
    • of

      public static UriKit of(String url)
      使用URL字符串构建UriKit,当传入的URL没有协议时,按照http协议对待,编码默认使用UTF-8
      Parameters:
      url - URL字符串
      Returns:
      this
    • of

      public static UriKit of(String url, Charset charset)
      使用URL字符串构建
      Parameters:
      url - URL字符串
      charset - 编码,用于URLEncode和URLDecode
      Returns:
      this
    • of

      public static UriKit of(URI uri, Charset charset)
      使用URI构建
      Parameters:
      uri - URI
      charset - 编码,用于URLEncode和URLDecode
      Returns:
      this
    • of

      public static UriKit of(URL url, Charset charset)
      使用URL构建
      Parameters:
      url - URL
      charset - 编码,用于URLEncode和URLDecode
      Returns:
      this
    • of

      public static UriKit of(String scheme, String host, int port, String path, String query, String fragment, Charset charset)
      构建
      Parameters:
      scheme - 协议,默认http
      host - 主机,例如127.0.0.1
      port - 端口,-1表示默认端口
      path - 路径,例如/aa/bb/cc
      query - 查询,例如a=1&b=2
      fragment - 标识符例如#后边的部分
      charset - 编码,用于URLEncode和URLDecode
      Returns:
      this
    • of

      public static UriKit of(String scheme, String host, int port, UriKit.Path path, UriKit.Query query, String fragment, Charset charset)
      构建
      Parameters:
      scheme - 协议,默认http
      host - 主机,例如127.0.0.1
      port - 端口,-1表示默认端口
      path - 路径,例如/aa/bb/cc
      query - 查询,例如a=1&b=2
      fragment - 标识符例如#后边的部分
      charset - 编码,用于URLEncode和URLDecode
      Returns:
      this
    • url

      public static URL url(String url)
      通过一个字符串形式的URL地址创建URL对象
      Parameters:
      url - URL
      Returns:
      URL对象
    • 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, URLStreamHandler handler)
      通过一个字符串形式的URL地址创建URL对象
      Parameters:
      url - URL
      handler - URLStreamHandler
      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 path)
      获得URL
      Parameters:
      path - 相对路径(相对于classes)
      Returns:
      URL
      See Also:
    • getURL

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

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

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

      public static String formatUrl(String url)
      格式化URL链接
      Parameters:
      url - 需要格式化的URL
      Returns:
      格式化后的URL, 如果提供了null或者空串, 返回null
      See Also:
    • complateUrl

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

      public static String encode(String url) throws InternalException
      编码URL,默认使用UTF-8编码 将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头
      Parameters:
      url - URL
      Returns:
      编码后的URL
      Throws:
      InternalException - UnsupportedEncodingException
    • encodeAll

      public static String encodeAll(String url)
      编码URL,默认使用UTF-8编码 将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头
      Parameters:
      url - URL
      Returns:
      编码后的URL
    • encodeAll

      public static String encodeAll(String url, Charset charset)
      编码URL 将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头
      Parameters:
      url - URL
      charset - 编码
      Returns:
      编码后的URL
    • 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(String location) throws InternalException
      转字符串为URI
      Parameters:
      location - 字符串路径
      Returns:
      URI
      Throws:
      InternalException - 包装URISyntaxException
    • isFileURL

      public static boolean isFileURL(URL url)
      提供的URL是否为文件 文件协议包括"file", "vfsfile" 或 "vfs".
      Parameters:
      url - URL
      Returns:
      是否为文件
    • isJarURL

      public static boolean isJarURL(URL url)
      提供的URL是否为jar包URL 协议包括: "jar", "zip", "vfszip" 或 "wsjar".
      Parameters:
      url - URL
      Returns:
      是否为jar包URL
    • isJarFileURL

      public static boolean isJarFileURL(URL url)
      提供的URL是否为Jar文件URL 判断依据为file协议且扩展名为.jar
      Parameters:
      url - the URL to check
      Returns:
      whether the URL has been identified as a JAR file URL
    • 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
    • getJarFile

      public static JarFile getJarFile(URL url)
      从URL中获取JarFile
      Parameters:
      url - URL
      Returns:
      JarFile
    • 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 isEncode)
      标准化URL字符串,包括:
      1. 自动补齐“http://”头
      2. 去除开头的\或者/
      3. 替换\为/
      Parameters:
      url - URL字符串
      isEncode - 是否对URL中path部分的中文和特殊字符做转义(不包括 http:, /和域名部分)
      Returns:
      标准化后的URL字符串
    • normalize

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

      public static String encodeScheme(String scheme, String encoding)
      给定的编码编码给定的URI方案
      Parameters:
      scheme - 要编码的方案
      encoding - 要编码到的字符编码
      Returns:
      编码方案
    • encodeScheme

      public static String encodeScheme(String scheme, Charset charset)
      给定的编码编码给定的URI方案
      Parameters:
      scheme - 要编码的方案
      charset - 要编码到的字符编码
      Returns:
      编码方案
    • encodeAuthority

      public static String encodeAuthority(String authority, String encoding)
      用给定的编码编码给定的URI权限.
      Parameters:
      authority - 要编码的权限
      encoding - 要编码到的字符编码
      Returns:
      编码信息
    • encodeAuthority

      public static String encodeAuthority(String authority, Charset charset)
      用给定的编码编码给定的URI权限.
      Parameters:
      authority - 要编码的权限
      charset - 要编码到的字符编码
      Returns:
      编码信息
    • encodeUserInfo

      public static String encodeUserInfo(String userInfo, String encoding)
      用给定的编码编码给定的URI用户信息.
      Parameters:
      userInfo - 要编码的用户信息
      encoding - 要编码到的字符编码
      Returns:
      编码后的用户信息
    • encodeUserInfo

      public static String encodeUserInfo(String userInfo, Charset charset)
      用给定的编码编码给定的URI用户信息.
      Parameters:
      userInfo - 要编码的用户信息
      charset - 要编码到的字符编码
      Returns:
      编码后的用户信息
    • encodeHost

      public static String encodeHost(String host, String encoding)
      用给定的编码编码给定的URI主机.
      Parameters:
      host - 要编码的主机
      encoding - 要编码到的字符编码
      Returns:
      编码的主机
    • encodeHost

      public static String encodeHost(String host, Charset charset)
      用给定的编码编码给定的URI主机.
      Parameters:
      host - 要编码的主机
      charset - 要编码到的字符编码
      Returns:
      编码的主机
    • encodePort

      public static String encodePort(String port, String encoding)
      用给定的编码编码给定的URI端口。
      Parameters:
      port - 被编码的端口
      encoding - 要编码到的字符编码
      Returns:
      编码后的端口
    • encodePort

      public static String encodePort(String port, Charset charset)
      用给定的编码编码给定的URI端口。
      Parameters:
      port - 被编码的端口
      charset - 要编码到的字符编码
      Returns:
      编码后的端口
    • encodePath

      public static String encodePath(String path, String encoding)
      用给定的编码编码给定的URI路径.
      Parameters:
      path - 要编码的路径
      encoding - 要编码到的字符编码
      Returns:
      编码的路径
    • encodePath

      public static String encodePath(String path, Charset charset)
      用给定的编码编码给定的URI路径.
      Parameters:
      path - 要编码的路径
      charset - 要编码到的字符编码
      Returns:
      编码的路径
    • encodePathSegment

      public static String encodePathSegment(String segment, String encoding)
      用给定的编码编码给定的URI路径段.
      Parameters:
      segment - 要编码的段
      encoding - 要编码到的字符编码
      Returns:
      编码部分
    • encodePathSegment

      public static String encodePathSegment(String segment, Charset charset)
      用给定的编码编码给定的URI路径段.
      Parameters:
      segment - 要编码的段
      charset - 要编码到的字符编码
      Returns:
      编码部分
    • encodeQuery

      public static String encodeQuery(String url)
      编码URL,默认使用UTF-8编码 将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。 此方法用于POST请求中的请求体自动编码,转义大部分特殊字符
      Parameters:
      url - URL
      Returns:
      编码后的URL
    • encodeQuery

      public static String encodeQuery(String query, String encoding)
      用给定的编码编码给定的URI查询.
      Parameters:
      query - 要编码的查询
      encoding - 要编码到的字符编码
      Returns:
      编码查询
    • encodeQuery

      public static String encodeQuery(String query, Charset charset)
      用给定的编码编码给定的URI查询.
      Parameters:
      query - 要编码的查询
      charset - 要编码到的字符编码
      Returns:
      编码查询
    • encodeQueryParam

      public static String encodeQueryParam(String queryParam, String encoding)
      用给定的编码编码给定的URI查询参数.
      Parameters:
      queryParam - 要编码的查询参数
      encoding - 要编码到的字符编码
      Returns:
      编码查询参数
    • encodeQueryParam

      public static String encodeQueryParam(String queryParam, Charset charset)
      用给定的编码编码给定的URI查询参数.
      Parameters:
      queryParam - 要编码的查询参数
      charset - 要编码到的字符编码
      Returns:
      编码查询参数
    • encodeFragment

      public static String encodeFragment(String fragment, String encoding)
      用给定的编码编码给定的URI片段.
      Parameters:
      fragment - 要编码的片段
      encoding - 要编码到的字符编码
      Returns:
      编码的字符串
    • encodeFragment

      public static String encodeFragment(String fragment, Charset charset)
      用给定的编码编码给定的URI片段.
      Parameters:
      fragment - 要编码的片段
      charset - 要编码到的字符编码
      Returns:
      编码的字符串
    • encode

      public static String encode(String source, String encoding)
      用字符串字符串解码的变体.
      Parameters:
      source - 要编码的字符串
      encoding - 要编码到的字符编码
      Returns:
      编码的字符串
    • encode

      public static String encode(String source, Charset charset)
      对URI中任何地方的所有非法字符或具有保留含义的字符进行编码.
      Parameters:
      source - 要编码的字符串
      charset - 要编码到的字符编码
      Returns:
      编码的字符串
    • encodeUriVariables

      public static Map<String,String> encodeUriVariables(Map<String,?> uriVariables)
      应用encode(String, java.nio.charset.Charset)到所有给定的URI变量值.
      Parameters:
      uriVariables - 要编码的URI变量值
      Returns:
      编码的字符串
    • encodeUriVariables

      public static Object[] encodeUriVariables(Object... uriVariables)
      应用encode(String, java.nio.charset.Charset)到所有给定的URI变量值
      Parameters:
      uriVariables - 要编码的URI变量值
      Returns:
      编码的字符串
    • uriDecode

      public static String uriDecode(String source, Charset charset)
    • decode

      public static String decode(String url)
      解码URL 将%开头的16进制表示的内容解码。
      Parameters:
      url - URL
      Returns:
      解码后的URL
    • decode

      public static String decode(String source, String encoding)
      解码给定的URI编码组件.

      See uriDecode(String, java.nio.charset.Charset) for the decoding rules.

      Parameters:
      source - 编码的字符串
      encoding - 要使用的字符编码
      Returns:
      解码值
      Throws:
      IllegalArgumentException - 当给定源包含无效的编码序列时
    • decode

      public static String decode(String source, Charset charset)
      解码给定的URI编码组件.
      Parameters:
      source - 编码的字符串
      charset - 要使用的字符编码
      Returns:
      解码值
      Throws:
      IllegalArgumentException - 当给定源包含无效的编码序列时
    • extractFileExtension

      public static String extractFileExtension(String path)
      从给定的URI路径中提取文件扩展名.
      Parameters:
      path - URI路径 (e.g. "/products/index.html")
      Returns:
      提取的文件扩展名 (e.g. "html")
    • encodeVal

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

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

      Parameters:
      paramsStr - url参数,可以包含url本身
      charset - 编码
      Returns:
      编码后的url和参数
    • normalize

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

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

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

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

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

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

      public static String withForm(String url, Map<String,Object> form, Charset charset, boolean isEncodeParams)
      将表单数据加到URL中(用于GET表单提交) 表单的键值对会被url编码,但是url中原参数不会被编码
      Parameters:
      url - URL
      form - 表单数据
      charset - 编码
      isEncodeParams - 是否对键和值做转义处理
      Returns:
      合成后的URL
    • withForm

      public static String withForm(String url, String queryString, Charset charset, boolean isEncode)
      将表单数据字符串加到URL中(用于GET表单提交)
      Parameters:
      url - URL
      queryString - 表单数据字符串
      charset - 编码
      isEncode - 是否对键和值做转义处理
      Returns:
      拼接后的字符串
    • getHost

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

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

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

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

      public String getScheme()
      获取协议,例如http
      Returns:
      协议,例如http
    • setScheme

      public UriKit setScheme(String scheme)
      设置协议,例如http
      Parameters:
      scheme - 协议,例如http
      Returns:
      this
    • getSchemeWithDefault

      public String getSchemeWithDefault()
      获取协议,例如http,如果用户未定义协议,使用默认的http协议
      Returns:
      协议,例如http
    • getHost

      public String getHost()
      获取 主机,例如127.0.0.1
      Returns:
      主机,例如127.0.0.1
    • setHost

      public UriKit setHost(String host)
      设置主机,例如127.0.0.1
      Parameters:
      host - 主机,例如127.0.0.1
      Returns:
      this
    • getPort

      public int getPort()
      获取端口,默认-1
      Returns:
      端口,默认-1
    • setPort

      public UriKit setPort(int port)
      设置端口,默认-1
      Parameters:
      port - 端口,默认-1
      Returns:
      this
    • getAuthority

      public String getAuthority()
      获得authority部分
      Returns:
      authority部分
    • getPath

      public UriKit.Path getPath()
      获取路径,例如/aa/bb/cc
      Returns:
      路径,例如/aa/bb/cc
    • setPath

      public UriKit setPath(UriKit.Path path)
      设置路径,例如/aa/bb/cc,将覆盖之前所有的path相关设置
      Parameters:
      path - 路径,例如/aa/bb/cc
      Returns:
      this
    • getPathString

      public String getPathString()
      获得路径,例如/aa/bb/cc
      Returns:
      路径,例如/aa/bb/cc
    • addPath

      public UriKit addPath(String segment)
      增加路径节点
      Parameters:
      segment - 路径节点
      Returns:
      this
    • appendPath

      public UriKit appendPath(CharSequence segment)
      追加path节点
      Parameters:
      segment - path节点
      Returns:
      this
    • getQuery

      public UriKit.Query getQuery()
      获取查询语句,例如a=1&b=2
      Returns:
      查询语句,例如a=1&b=2
    • setQuery

      public UriKit setQuery(UriKit.Query query)
      设置查询语句,例如a=1&b=2,将覆盖之前所有的query相关设置
      Parameters:
      query - 查询语句,例如a=1&b=2
      Returns:
      this
    • getQueryString

      public String getQueryString()
      获取查询语句,例如a=1&b=2
      Returns:
      查询语句,例如a=1&b=2
    • addQuery

      public UriKit addQuery(String key, Object value)
      添加查询项,支持重复键
      Parameters:
      key - 键
      value - 值
      Returns:
      this
    • getFragment

      public String getFragment()
      获取标识符,#后边的部分
      Returns:
      标识符,例如#后边的部分
    • setFragment

      public UriKit setFragment(String fragment)
      设置标识符,例如#后边的部分
      Parameters:
      fragment - 标识符,例如#后边的部分
      Returns:
      this
    • getFragmentEncoded

      public String getFragmentEncoded()
      获取标识符,#后边的部分
      Returns:
      标识符,例如#后边的部分
    • getCharset

      public Charset getCharset()
      获取编码,用于URLEncode和URLDecode
      Returns:
      编码
    • setCharset

      public UriKit setCharset(Charset charset)
      设置编码,用于URLEncode和URLDecode
      Parameters:
      charset - 编码
      Returns:
      this
    • build

      public String build()
      创建URL字符串
      Returns:
      URL字符串
    • toURL

      public URL toURL()
      转换为URL 对象
      Returns:
      URL
    • toURL

      public URL toURL(URLStreamHandler handler)
      转换为URL 对象
      Parameters:
      handler - URLStreamHandler,null表示默认
      Returns:
      URL
    • toURI

      public URI toURI()
      转换为URI
      Returns:
      URI
    • toString

      public String toString()
      Overrides:
      toString in class Object