iT邦幫忙

0

Kotlin - Kotlin IO另外提供的 File walker功能,幫你走訪資料夾中的所有資料(深層)

  • 分享至 

  • xImage
  •  

那天自己想在資料夾中找到某一個檔案根據檔名的位置,於是就自己寫了一個醜醜的listFiles()

// 但我這邊是找某一個資料夾,在該層找檔案,並不是整個網所有資料夾深入
val foundFile = fileFolder.takeIf { it.exists() }?.let {
    it.listFiles()?.firstOrNull { file ->
        file.name.equals("MAP")
    }?.let { mapFile ->
        mapFile.listFiles()?.firstOrNull { mapFiles ->
            mapFiles.name.equals("Img.data")
        }
    }
}

後來用了Copilot 想說讓他簡化一下,沒想到他給我了這個答案

fileFolder.let {
    it.walk().forEach { file ->
        if (file.name == findFileName) {
            return file
        }
    }
}

我才發現,原來kotlin io中有提供一個 file的extension,而且很簡單的,就叫做 walk,可以直接幫你走訪所有的資料夾中的檔案,直到你處理找到你要的檔案就可以return

package kotlin.io

/**
 * Gets a sequence for visiting this directory and all its content.
 *
 * @param direction walk direction, top-down (by default) or bottom-up.
 */
public fun File.walk(direction: FileWalkDirection = FileWalkDirection.TOP_DOWN): FileTreeWalk =
    FileTreeWalk(this, direction)

而且他還有其他功能,原來有一個FileTreeWalk的檔案

https://ithelp.ithome.com.tw/upload/images/20230920/20125654H8UKrS8Ven.png

下次如果有同樣需求的,也可以試試看


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言