Как написать рекурсивные сопрограммы в котлин

Я хотел бы написать более быстрый File Searcher в kotlin, чтобы найти все текстовые файлы в моей домашней папке.

Вот мой код с поиском последовательностей

import java.io.File import java.util.concurrent.atomic.AtomicLong var count: AtomicLong = AtomicLong(0) fun main(args: Array<String>) { println(System.getProperty("user.home")) val start = System.currentTimeMillis() findTxtFile(System.getProperty("user.home") + "/git", ".txt") println("took: " + (System.currentTimeMillis() - start)) println(count.get()) } fun findTxtFile(path: String, extension: String) { File(path).listFiles().forEach { if (it.isDirectory) { findTxtFile(it.absolutePath, extension) } else if (it.name.endsWith(extension)) { count.getAndIncrement() } } } 

Я написал следующую программу, однако, когда у вас много файла, он бросает NullPointerException, как можно было бы выбросить нулевой указатель Exception?

 import kotlinx.coroutines.experimental.CommonPool import kotlinx.coroutines.experimental.async import kotlinx.coroutines.experimental.runBlocking import java.io.File fun main(args: Array<String>) { val start = System.currentTimeMillis() var filePath = System.getProperty("user.home") var deferred = File(filePath).listFiles().map { path -> async(CommonPool) { findTxtFile(path.absolutePath) } } runBlocking { deferred.map { it.await() } } println((System.currentTimeMillis() - start) / 1000) } suspend fun findTxtFile(path: String) { //println("--------------------- $path") if (File(path).isDirectory) { File(path).listFiles().forEach { findTxtFile(it.absolutePath) //===> Exception happen here } } else if (path.endsWith(".java")) { println(path) } } 

Intereting Posts
Java и Kotlin кастинг с дженериками. Потеря безопасности Если hashCode () возвращает уникальный идентификатор объекта Kotlin, Java, multidex, Dagger 2, Butterknife and Realm: transformClassesWithJarMergingForDebug: дублирующаяся запись: org / jetbrains / annotations / NotNull.class Ошибка при загрузке приложения IBM Bluemix Cloud Foundry SpringBoot kotlin, как добавить функцию расширения к уже определенному классу сопутствующего объекта Прогард и Котлин-Отражение / Котлин Аннотации : compileKotlin не работает в Gradle (смешанный проект Java + Kotlin) Кнопка Detect Back Нажмите кнопку в Android View Kotlin 0.11.91 Unresolved Reference: inv () Котлин – Проблемы с while () Android – IllegalStateException: cursor.getString (idx) не должно быть null Стоимость переключения потоков в RxJava и операции копирования класса данных Kotlin Kotlin / Android: возвращение может быть отменено из «когда» Почему Kotlin необходимо связать свою рабочую среду после компиляции? RxJava и дооснащение с использованием Kotlin