Java 获取 URL 的文件名和问号后参数值【优雅】

最近工作经常会碰到处理 URL ,可能会要求获取 URL 的文件名或拓展名,也有可能需要获取 URL 中参数 Key 的值。

比如下面这样一个 URL

https://oss-cn-beijing.aliyuncs.com/bill_lx_mode/data/888.csv?Expires=1616662433&OSSAccessKeyId=LTAImnSpUvnQ9cuR&Signature=5SgMbg9XB7K8xEcG8hKaTdRRcX4%3D

如果用 StringAPI 获取文件名和参数的值,这就有点低级。

这里我分享更好的方法,可以参考。

获取文件名

这里我直接上方法,根据注释应该很容易看懂,简单来说就是利用org.apache.commons.io.FilenameUtils

 String s = "https://oss-cn-beijing.aliyuncs.com/bill_lx_mode/data/888.csv?Expires=1616662433&OSSAccessKeyId=LTAImnSpUvnQ9cuR&Signature=5SgMbg9XB7K8xEcG8hKaTdRRcX4%3D";
        URL url = null;
        try {
            url = new URL(s);
            System.out.println(FilenameUtils.getName(url.getPath())); //888.csv
            System.out.println(FilenameUtils.getBaseName(url.getPath())); //888
            System.out.println(FilenameUtils.getExtension(url.getPath())); //xml
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

获取参数的值

同样是上面的 URL,要获取 Expires 对应的值,这种需求应该也很常见。方法有很多,但都大同小异,利用 StringAPI,下面是我的分享。

利用下面的方法方法将 URL 的参数和值存到 Map

public static Map<String, String> splitQuery(URL url) throws UnsupportedEncodingException {
        Map<String, String> query_pairs = new LinkedHashMap<String, String>();
        String query = url.getQuery();
        String[] pairs = query.split("&");
        for (String pair : pairs) {
            int idx = pair.indexOf("=");
            query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
        }
        return query_pairs;
    }

接着就可以随便取想要的 Key

    Map<String, String> stringMap = splitQuery(url);
    System.out.println(stringMap.get("Expires"));
    System.out.println(stringMap.get("OSSAccessKeyId"));
    System.out.println(stringMap.get("Signature"));

本文由老郭种树原创,转载请注明:https://guozh.net/gets-the-file-name-of-the-url-in-java/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注