You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:50:17