用string.lastindexof("/")配合substring()可提取路径末尾文件名,但需处理无斜杠、末尾斜杠及windows反斜杠;推荐使用paths.get(path).getfilename()更健壮可靠。

直接用 String.lastIndexOf("/") 找到最后一个斜杠位置,再用 substring() 截取后面部分,就能精准拿到文件名或目录名。
获取最后一个斜杠后的子串(含文件扩展名)
这是最常用场景:从类似 /home/user/docs/report.pdf 中提取 report.pdf。
- 调用
path.lastIndexOf("/")得到最后斜杠的索引(若无斜杠,返回 -1) - 检查索引是否 ≥ 0,避免越界;若为 -1,说明路径不含斜杠,整个字符串就是“名称”
- 用
path.substring(index + 1)获取斜杠之后全部内容
处理 Windows 路径中的反斜杠()
Windows 文件路径常用反斜杠,如 C:UsersJohnile.txt。Java 中 是转义字符,需写成 "\" 或改用正则/通用方式。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 推荐统一用
File.separator:它自动适配系统(Linux/macOS 返回"/",Windows 返回"\") - 代码示例:
int idx = path.lastIndexOf(File.separator); - 也可用
path.lastIndexOf('/')和path.lastIndexOf('\')取两者较大值,兼容混合写法
安全截取:避免空字符串或无效结果
路径可能以斜杠结尾(如 /home/user/),此时 lastIndexOf("/") 指向末尾,substring(idx + 1) 会返回空字符串——这不是预期的文件名。
- 截取前先用
path.endsWith(File.separator)判断是否以分隔符结尾 - 若是,可先
path = path.substring(0, Math.max(0, path.length() - File.separator.length()))去掉末尾分隔符 - 或者更简洁:在查找前用
path = path.replaceAll("[" + Pattern.quote(File.separator) + "]+$", "")清理尾部多余分隔符
替代方案:用 Paths 和 Path(推荐用于新项目)
java.nio.file.Paths 更健壮,自动处理不同平台、冗余分隔符和相对路径。
Path p = Paths.get(path); String name = p.getFileName().toString();-
getFileName()返回最后一段(不含父路径),且已去除末尾分隔符影响 - 即使输入是
"a//b///c.txt"或"C:\temp\\",结果也准确可靠
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










