最近工作经常会碰到处理 URL
,可能会要求获取 URL
的文件名或拓展名,也有可能需要获取 URL
中参数 Key
的值。
比如下面这样一个 URL
https://oss-cn-beijing.aliyuncs.com/bill_lx_mode/data/888.csv?Expires=1616662433&OSSAccessKeyId=LTAImnSpUvnQ9cuR&Signature=5SgMbg9XB7K8xEcG8hKaTdRRcX4%3D
如果用 String
的 API
获取文件名和参数的值,这就有点低级。
这里我分享更好的方法,可以参考。
获取文件名
这里我直接上方法,根据注释应该很容易看懂,简单来说就是利用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
对应的值,这种需求应该也很常见。方法有很多,但都大同小异,利用 String
的 API
,下面是我的分享。
利用下面的方法方法将 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/