那天自己想在资料夹中找到某一个档案根据档名的位置,于是就自己写了一个丑丑的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的档案
下次如果有同样需求的,也可以试试看