如何从Retrofit获取的字符串类型URL中提取文件名?
提取URL字符串中的文件名
这里给你几种实用的实现方式,适配不同场景:
方法1:用Java原生URL类解析(通用场景)
利用Java自带的java.net.URL类解析路径,再截取文件名,还能处理参数:
String urlStr = "https://example.com/files/report.pdf?token=abc123"; try { URL url = new URL(urlStr); String path = url.getPath(); // 截取最后一个/后的内容 String fileName = path.substring(path.lastIndexOf('/') + 1); // 去掉可能带的查询参数 if (fileName.contains("?")) { fileName = fileName.split("\\?")[0]; } System.out.println(fileName); // 输出report.pdf } catch (MalformedURLException e) { // 处理无效URL的情况 e.printStackTrace(); }
方法2:纯字符串分割(简单场景)
如果你的URL格式比较规范,直接用字符串操作就能搞定:
String urlStr = "https://example.com/assets/photo.jpg"; // 先移除查询参数(如果有的话) String cleanUrl = urlStr.split("\\?")[0]; // 截取最后一个/之后的部分 String fileName = cleanUrl.substring(cleanUrl.lastIndexOf('/') + 1); System.out.println(fileName); // 输出photo.jpg
方法3:Android平台用系统Uri工具
如果是Android项目,用android.net.Uri会更省心:
String urlStr = "https://example.com/downloads/package.zip#detail"; Uri uri = Uri.parse(urlStr); String fileName = uri.getLastPathSegment(); // 去掉可能的锚点部分 if (fileName != null && fileName.contains("#")) { fileName = fileName.split("#")[0]; } Log.d("ExtractedFileName", fileName); // 输出package.zip
额外提醒
- 要注意URL路径以
/结尾的情况(比如https://example.com/files/),这种时候要做非空判断,避免下标越界 - 如果URL可能包含特殊字符,确保分割逻辑能兼容,比如文件名里带
?的情况(虽然这种场景极少)
内容的提问来源于stack exchange,提问作者Kasepriun Alcatraz
相关产品推荐
相关产品推荐

