java中提取文件名和扩展名最稳妥方式是用java.nio.file.paths和path api:先paths.get(path).getfilename().tostring()获取不含路径的文件名,再按规则分离基础名与扩展名,避免字符串切割导致的多点扩展名(如.tar.gz)和路径分隔符错误。

Java 中提取文件名和扩展名,最稳妥的方式是用 java.nio.file.Paths 和 Path API,而不是手动字符串切割——因为路径分隔符(/ 或 )和多点扩展名(如 .tar.gz)容易出错。
用 Path API 安全提取文件名(含扩展名)
Path.get(fileName) 会自动适配系统路径规则,再调用 getFileName() 可拿到最后一段(不含目录):
- 例如
"C:\data\report.pdf"→report.pdf - 例如
"/home/user/log/error.log.2024"→error.log.2024
分离基础名和扩展名(支持常见单扩展)
获取文件名后,用 String.lastIndexOf('.') 判断最后一点位置,但要注意:扩展名不能为空、不能在开头、且不能全是点:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 先检查
fileName.indexOf('.') > 0 && fileName.lastIndexOf('.') - 再用
substring(0, lastDot)得基础名,substring(lastDot + 1)得扩展名 - 如
"image.jpg"→ 基础名"image",扩展名"jpg" - 如
"archive.tar.gz"→ 上述方法只取"gz";若需完整扩展,得按约定处理(见下条)
处理多级扩展名(如 .tar.gz、.foo.bar)
没有通用标准,通常按业务约定。常见策略有:
- 取「已知归档扩展名」列表(如
Set.of("tar", "zip", "jar", "war")),先匹配前缀,再切剩余部分 - 或直接使用 Apache Commons IO 的
FilenameUtils.getBaseName()和getExtension(),它支持自定义扩展名白名单 - 例如
FilenameUtils.getExtension("data.tar.gz")默认返回"gz",但设FilenameUtils.getExtension("data.tar.gz", true)(需 2.11+)可返回"tar.gz"
避免踩坑的提醒
不用 String.split("\.") —— 会把 "my.file.name.txt" 拆成四段,无法判断哪段是扩展;也不建议用 File.getName()(已过时且不处理 UNC 路径)。始终优先走 Paths.get(path).getFileName().toString() 这条链路,再做后续解析。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










