15.7 执行Shell命令行
我们使用 Groovy 的文件 IO 操作感觉非常好用,例如
package com.easy.kotlin
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@RunWith(JUnit4)
class ShellExecuteDemoTest {
@Test
def void testShellExecute() {
def p = "ls -R".execute()
def output = p.inputStream.text
println(output)
def fname = "我图.url"
def f = new File(fname)
def lines = f.readLines()
lines.forEach({
println(it)
})
println(f.text)
}
}
Kotlin 中的文件 IO,网络 IO 操作跟 Groovy一样简单。
另外,从上面的代码中我们看到使用 Groovy 执行终端命令非常简单:
def p = "ls -R".execute()
def output = p.inputStream.text
在 Kotlin 中,目前还没有对 String 类和 Process 扩展这样的函数。其实扩展这样的函数非常简单。我们完全可以自己扩展。
首先,我们来扩展 String 的 execute() 函数。
fun String.execute(): Process {
val runtime = Runtime.getRuntime()
return runtime.exec(this)
}
然后,我们来给 Process 类扩展一个 text函数。
fun Process.text(): String {
var output = ""
// 输出 Shell 执行的结果
val inputStream = this.inputStream
val isr = InputStreamReader(inputStream)
val reader = BufferedReader(isr)
var line: String? = ""
while (line != null) {
line = reader.readLine()
output += line + "\n"
}
return output
}
完成了上面两个简单的扩展函数之后,我们就可以在下面的测试代码中,可以像 Groovy 一样执行终端命令了:
val p = "ls -al".execute()
val exitCode = p.waitFor()
val text = p.text()
println(exitCode)
println(text)
实际上,通过之前的很多实例的学习,我们可以看出 Kotlin 的扩展函数相当实用。Kotlin 语言本身API 也大量使用了扩展功能。
当前内容版权归 JackChan1999 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 JackChan1999 .