使用Kotlin实现自动化:为何值得关注
您是否曾花费一小时重命名上百个文件、手动解析日志,或将数据从一个API复制到另一个?这种痛苦想必不陌生。通常,我们会求助于Python或Bash来完成这类任务,但Kotlin——作为Kotlin自动化的工具——却出人意料地强大且优雅。它兼具现代语言的简洁性、JVM的高性能,并能完全访问Java生态系统。
本文不会编写又一个“Hello, World”。我们将直接切入正题:分析那些在日常开发、运维或测试工作中真正实用的Kotlin代码示例。您将学习如何编写Kotlin脚本,用于文件操作、发送HTTP请求、数据解析以及运行系统命令。开始吧!
为何选择Kotlin,而非Python或Bash?
每种语言都有其适用领域。Bash擅长快速单行命令,Python则适用于复杂逻辑和数据科学。但Kotlin用于自动化提供了几个独特优势:
- 类型安全。您不会在运行时遇到“string vs int”错误——编译器会在初期就将其捕获。
- 与Java完全兼容。任何Java库(如Apache POI、OkHttp、Jackson)均可开箱即用。
- Kotlin脚本(.kts)。无需编译即可编写脚本——像普通.sh文件一样直接运行。
- 简洁的语法。更少的样板代码,更高的可读性。
Kotlin脚本的环境配置
运行Kotlin脚本无需安装Android Studio。只需:
- 安装Kotlin编译器(或通过SDKMAN)。
- 创建一个扩展名为
.kts的文件。 - 使用命令运行:
kotlinc -script script.kts
完成。现在我们来编写第一个真正实用的脚本。
示例1:批量重命名文件
假设:您有一个包含照片的文件夹IMG_001.jpg, IMG_002.jpg ... IMG_100.jpg。需要将它们重命名为holiday_01.jpg, holiday_02.jpg ...。手动操作需10分钟。用脚本只需2秒。
import java.io.File
fun main() { val folder = File("/path/to/photos") val files = folder.listFiles()?.filter { it.extension == "jpg" } ?: return
files.sorted().forEachIndexed { index, file -> val newName = "holiday_${index.toString().padStart(2, '0')}.jpg" val newFile = File(folder, newName) file.renameTo(newFile) println("Renamed: ${file.name} -> $newName") }}
// 运行:kotlinc -script rename.kts这个Kotlin代码示例完成了三件事:仅过滤JPG文件、按名称排序(以保持顺序)、以及带编号的重命名。请注意padStart——这是Kotlin中用于数字格式化的优雅特性。
示例2:HTTP请求与JSON解析
经常需要自动化从Web API收集数据。假设我们获取用户列表并将其保存为CSV。在Kotlin用于自动化中,这可以通过ktor-client库(或传统的java.net.HttpURLConnection)用几行代码完成。
但对于脚本,更简单的方式是通过@file:DependsOn引入外部库:
@file:DependsOn("com.google.code.gson:gson:2.10.1")@file:DependsOn("io.ktor:ktor-client-core:2.3.7")@file:DependsOn("io.ktor:ktor-client-java:2.3.7")
import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import com.google.gson.Gsonimport com.google.gson.reflect.TypeTokenimport java.io.File\