Kotlin如何为内部存储已存在文件添加递增后缀且不追加到扩展名后
实现文件名递增后缀的正确方案
你遇到的问题核心是直接将序号拼接在完整文件路径末尾,没有拆分文件名和扩展名,才会出现filename.ext(1)的错误格式。
以下是可直接运行的实现代码:
val originalFile = File(it.path) // 提前创建父目录,避免路径不存在报错 originalFile.parentFile?.mkdirs() if (originalFile.exists()) { // 拆分文件名与扩展名 val fileName = originalFile.nameWithoutExtension val extension = originalFile.extension val parentPath = originalFile.parent var index = 1 var targetFile: File // 循环递增序号,直到找到未被占用的文件名 do { val newFileName = if (extension.isEmpty()) { // 兼容无扩展名的文件 "$fileName($index)" } else { "$fileName($index).$extension" } targetFile = File(parentPath, newFileName) index++ } while (targetFile.exists()) // 执行重命名操作 originalFile.renameTo(targetFile) } // 创建新的原路径文件 originalFile.createNewFile()
关键注意点
- 用Kotlin
File类自带的nameWithoutExtension、extension属性拆分文件名和扩展名,不需要手动处理字符串切割,同时兼容带多个小数点的文件名(比如test.v2.txt会被正确识别为基础名test.v2、扩展名txt) - 增加循环判断逻辑,哪怕已经存在
filename(1).ext、filename(2).ext,也会自动递增到最大可用序号,不会出现覆盖问题 - 兼容无扩展名的文件场景,不会生成多余的小数点
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

