用String.lastIndexOf("/")找最后一个斜杠位置再substring截取可获取文件名,但需兼容Windows反斜杠、处理路径结尾斜杠或空字符串等边界情况。

直接用 String.lastIndexOf("/") 找到最后一个斜杠位置,再用 substring() 截取后面部分,就能拿到文件名。
确认路径分隔符是正斜杠(/)
Java 中处理 Unix/Linux/macOS 路径或 URL 时,分隔符是 /;Windows 文件路径默认用反斜杠 ,但很多 Java API(如 Paths.get()、File.separator)会自动适配。如果你的路径字符串明确含 /(比如来自 HTTP 请求、配置项或跨平台拼接),可直接用:
-
✅ 正确示例:
"/home/user/docs/report.pdf"→ 最后一个/在索引 16,substring(17)得"report.pdf" -
⚠️ 注意:如果路径是
"C:\Users\name\file.txt"(含\),lastIndexOf("/")会返回-1,导致截取异常
安全获取文件名(兼容 / 和 )
更健壮的做法是统一用 File.separator 或正则匹配末尾分隔符,但若只依赖 lastIndexOf(),推荐双路检查:
- 先查
lastIndexOf("/"),再查lastIndexOf("\") - 取两者中**较大索引值**(即靠后的那个分隔符),避免 Windows 路径漏判
- 若都为
-1,说明无分隔符,整个字符串就是文件名
处理边界情况:路径以斜杠结尾或为空
比如 "/var/log/" 或 "",直接 substring(lastIndex + 1) 可能返回空串或抛 StringIndexOutOfBoundsException:
- 先判断
lastIndex是否 ≥ 0 - 再检查
lastIndex + 1是否 path.length() - 推荐写法:
int sep = Math.max(path.lastIndexOf("/"), path.lastIndexOf("\"));
然后String name = (sep >= 0 && sep + 1
替代方案:用 Paths.get().getFileName()(推荐)
如果目标是真正“提取文件名”,而不是练手 lastIndexOf,Java NIO 提供了语义更清晰、平台无关的方式:
Paths.get(path).getFileName().toString()- 自动处理
/、、末尾分隔符、空路径等所有边界 - 还支持
getFileName().toString()返回不含路径的纯文件名,getNameCount()等扩展能力










