有了扩展函数,可以在Java类库的基础上扩展出大量“看似Java类中的原生方法”。
Kotlin的标准库 kotlin-stdlib 中大量API都是通过扩展Java类实现的。
Kotlin的原则就是Java已经有的好用的类就直接使用,没有的或者不好用的类,就在原有类的基础上进行功能扩展。
Kotlin为 java.io.File 类扩展了大量好用的扩展函数,同时也针对 Java的 InputStream,OutputStream,Reader 等都做了扩展,相应的代码在 kotlin.io 包下。
- readText() 函数
- readLines() 函数
- readBytes() 函数
fun getFileContent(fileName: String): String { val f = File(fileName) return f.readText(Charsets.UTF_8) } fun getFileLines(fileName: String): List{ val f = File(fileName) return f.readLines(Charsets.UTF_8) }
fun getFileBytes(fileName: String): Unit { val f = File(fileName) val bytes = f.readBytes() val content = bytes.joinToString(separator = "_") println("readBytes: ") println(content) }写文件
与读文件类似,可以写入字符串,也可以写入字节流,还可以调用Java的 Writer、OutputStream 类。
写文件可以分为一次性写入(覆盖写)和追加写 两种情况。
- writeText() 函数
- appendText() 函数
- appendBytes() 函数
fun writeFile(text: String, destFile: String): Unit { val f = File(destFile) if (!f.exists()) { f.createNewFile() } // 覆盖写入字符串text f.writeText(text, Charset.defaultCharset()) }
fun appendFile(text: String, destFile: String): Unit { val f = File(destFile) if (!f.exists()) { f.createNewFile() } f.appendText(text, Charset.defaultCharset()) }
fun appendFileBytes(array: ByteArray, destFile: String): Unit { val f = File(destFile) if (!f.exists()) { f.createNewFile() } f.appendBytes(array) }遍历文件数
walk() 函数
fun traverseFileTree(folderName: String): Unit { val f = File(folderName) val fWalk = f.walk() fWalk.iterator().forEach { println("${it.name} ~~~ ${it.absolutePath}") } }
遍历当前文件夹下的所有子目录文件,根据条件进行过滤,把结果存入一个Sequence对象中:
fun getFileSequence(folderName: String, p: (File)->Boolean): Sequence{ val f = File(folderName) val fWalk = f.walk() return fWalk.filter(p) } fun testFileSequence(): Unit { val folder = "." // val p = fun(f:File) = run { f.name.endsWith(".kt") } val sequence = getFileSequence(folder) { file -> file.isFile } sequence.iterator().forEach { println(it.absolutePath) } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)