本文目录导读:

我来提供几个实用的Groovy脚本案例,涵盖不同场景:
文件处理脚本
// 文件批量重命名脚本
import java.nio.file.*
def directory = new File("/path/to/files")
def prefix = "2024_"
directory.eachFile { file ->
if (file.isFile() && file.name.endsWith('.txt')) {
def newName = prefix + file.name
def newFile = new File(directory, newName)
file.renameTo(newFile)
println "Renamed: ${file.name} -> ${newName}"
}
}
搜索替换
def sourceFile = new File("config.txt")
def content = sourceFile.text
content = content.replaceAll("oldValue", "newValue")
sourceFile.text = content
JSON处理脚本
@Grab('groovy-json')
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
// 解析JSON
def jsonText = '''
{
"users": [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
}
'''
def jsonSlurper = new JsonSlurper()
def data = jsonSlurper.parseText(jsonText)
data.users.each { user ->
println "用户: ${user.name}, 年龄: ${user.age}"
}
// 创建JSON
def result = [
status: "success",
timestamp: new Date().time,
users: data.users.findAll { it.age >= 25 }
]
println JsonOutput.prettyPrint(JsonOutput.toJson(result))
数据库操作脚本
@Grab('mysql:mysql-connector-java:8.0.33')
@GrabConfig(systemClassLoader = true)
import groovy.sql.Sql
// 连接数据库
def db = Sql.newInstance(
"jdbc:mysql://localhost:3306/mydb",
"username",
"password",
"com.mysql.cj.jdbc.Driver"
)
// 查询数据
db.eachRow("SELECT * FROM users WHERE age > ?", [25]) { row ->
println "用户: ${row.name}, 邮箱: ${row.email}"
}
// 插入数据
db.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
["Charlie", 28, "charlie@example.com"])
// 更新数据
db.executeUpdate("UPDATE users SET age = ? WHERE name = ?", [31, "Charlie"])
// 批量操作
db.withTransaction {
db.withBatch(10) { stmt ->
(1..100).each { i ->
stmt.addBatch("INSERT INTO logs (message) VALUES ('Log $i')")
}
}
}
db.close()
Web请求脚本
// HTTP请求处理
def url = new URL("https://api.github.com/users/octocat/repos")
def connection = url.openConnection()
connection.requestMethod = "GET"
connection.setRequestProperty("Accept", "application/vnd.github.v3+json")
if (connection.responseCode == 200) {
def response = connection.inputStream.text
def repos = new groovy.json.JsonSlurper().parseText(response)
repos.each { repo ->
println "仓库: ${repo.name} - 描述: ${repo.description}"
}
} else {
println "请求失败: ${connection.responseCode}"
}
// POST请求
def postData = [title: "测试", content: "内容"]
def encodedData = postData.collect { k, v -> "${k}=${URLEncoder.encode(v.toString(), 'UTF-8')}" }.join('&')
def postConn = new URL("https://httpbin.org/post").openConnection()
postConn.requestMethod = "POST"
postConn.doOutput = true
postConn.outputStream.write(encodedData.getBytes("UTF-8"))
postConn.outputStream.flush()
println "POST响应状态: ${postConn.responseCode}"
Excel文件处理
@Grab('org.apache.poi:poi:5.2.3')
@Grab('org.apache.poi:poi-ooxml:5.2.3')
import org.apache.poi.ss.usermodel.*
import org.apache.poi.xssf.usermodel.XSSFWorkbook
// 写入Excel
def workbook = new XSSFWorkbook()
def sheet = workbook.createSheet("员工数据")
def headers = ["姓名", "部门", "薪资", "入职日期"]
def headerRow = sheet.createRow(0)
headers.eachWithIndex { header, index ->
headerRow.createCell(index).setCellValue(header)
}
// 示例数据
def employees = [
["张三", "技术部", 12000, "2023-01-15"],
["李四", "市场部", 10000, "2023-03-20"],
["王五", "财务部", 11000, "2023-06-01"]
]
employees.eachWithIndex { emp, rowIndex ->
def row = sheet.createRow(rowIndex + 1)
emp.eachWithIndex { value, colIndex ->
row.createCell(colIndex).setCellValue(value.toString())
}
}
// 保存文件
def output = new FileOutputStream("employees.xlsx")
workbook.write(output)
output.close()
workbook.close()
println "Excel文件已生成!"
// 读取Excel
def input = new FileInputStream("employees.xlsx")
def readWorkbook = new XSSFWorkbook(input)
def readSheet = readWorkbook.getSheetAt(0)
readSheet.each { row ->
def values = []
row.each { cell ->
values << cell.toString()
}
println "行数据: ${values.join(', ')}"
}
readWorkbook.close()
日志分析脚本
// 分析Nginx访问日志
def logFile = new File("/var/log/nginx/access.log")
def ipCount = [:]
logFile.eachLine { line ->
// 简单解析:获取IP地址
def matcher = line =~ /^(\d+\.\d+\.\d+\.\d+)/
if (matcher.find()) {
def ip = matcher[0][1]
ipCount[ip] = (ipCount[ip] ?: 0) + 1
}
}
// 按访问次数排序
def sorted = ipCount.sort { -it.value }
println "最频繁的IP地址:"
sorted.take(10).each { ip, count ->
println "$ip - $count 次访问"
}
// 统计404错误
def errorCount = 0
logFile.eachLine { line ->
if (line.contains('" 404 ')) {
errorCount++
}
}
println "404错误总数: $errorCount"
自动化测试脚本
// 简单的接口测试脚本
class APITester {
def baseUrl
def testPassed = 0
def testFailed = 0
def testGet(String path, Map expectedParams) {
def url = "${baseUrl}${path}"
def restClient = new groovyx.net.http.RESTClient(url)
try {
def response = restClient.get(query: expectedParams)
if (response.status == 200) {
testPassed++
println "✅ GET $path - 成功"
} else {
testFailed++
println "❌ GET $path - 返回${response.status}"
}
} catch (Exception e) {
testFailed++
println "❌ GET $path - 异常: ${e.message}"
}
}
def testPost(String path, Map data) {
def restClient = new groovyx.net.http.RESTClient("${baseUrl}${path}")
try {
def response = restClient.post(body: data, requestContentType: 'application/json')
if (response.status == 201) {
testPassed++
println "✅ POST $path - 成功"
} else {
testFailed++
println "❌ POST $path - 返回${response.status}"
}
} catch (Exception e) {
testFailed++
println "❌ POST $path - 异常: ${e.message}"
}
}
def summary() {
println "\n测试汇总:"
println "通过: $testPassed"
println "失败: $testFailed"
println "总用例: ${testPassed + testFailed}"
}
}
// 使用示例
def tester = new APITester(baseUrl: "https://jsonplaceholder.typicode.com")
tester.testGet("/posts/1", [id: 1])
tester.testGet("/users", [limit: 5])
tester.testPost("/posts", [title: "测试", body: "内容", userId: 1])
tester.summary()
系统监控脚本
// 系统资源监控
import java.lang.management.*
def runtime = Runtime.getRuntime()
println "=== 系统监控报告 (${new Date()}) ==="
// 内存信息
def totalMem = runtime.totalMemory() / (1024 * 1024)
def freeMem = runtime.freeMemory() / (1024 * 1024)
def usedMem = totalMem - freeMem
println "内存使用: ${usedMem.round(2)} MB / ${totalMem.round(2)} MB"
// CPU信息
def osMxBean = ManagementFactory.getOperatingSystemMXBean()
println "CPU核心数: ${osMxBean.availableProcessors}"
println "系统负载: ${osMxBean.systemLoadAverage}"
// 线程信息
def threadMxBean = ManagementFactory.getThreadMXBean()
println "活动线程数: ${threadMxBean.threadCount}"
println "峰值线程数: ${threadMxBean.peakThreadCount}"
// 磁盘空间
def root = new File("/")
def freeSpace = root.freeSpace / (1024 * 1024 * 1024)
def totalSpace = root.totalSpace / (1024 * 1024 * 1024)
println "磁盘使用: ${totalSpace - freeSpace} GB / ${totalSpace} GB"
注意事项:
- 依赖管理:使用
@Grab注解自动下载依赖 - 错误处理:始终包含适当的异常处理
- 资源管理:记得关闭文件流、数据库连接等资源
- 性能优化:大数据量时考虑使用流式处理
- 安全性:不要在脚本中硬编码敏感信息
这些案例覆盖了常见的开发场景,你可以根据实际需求调整和组合这些脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播