有没有办法获取Kotlin“resources”文件夹中所有文件的列表?
我可以将特定文件读为
Application::class.java.getResourceAsStream("/folder/filename.ext")
但有时我只是想从文件夹“folder”中提取所有内容。
谢谢。
答案 0 :(得分:2)
没有方法(即Application::class.java.listFilesInDirectory("/folder/")
),但您可以创建自己的系统来列出目录中的文件:
@Throws(IOException::class)
fun getResourceFiles(path: String): List<String> = getResourceAsStream(path).use{
return if(it == null) emptyList()
else BufferedReader(InputStreamReader(it)).readLines()
}
private fun getResourceAsStream(resource: String): InputStream? =
Thread.currentThread().contextClassLoader.getResourceAsStream(resource)
?: resource::class.java.getResourceAsStream(resource)
然后只需致电getResourceFiles("/folder/")
,您就会获得该文件夹中的文件列表,假设它在类路径中。
这是有效的,因为Kotlin有一个扩展函数,可以将行读入字符串列表。声明是:
/**
* Reads this reader content as a list of lines.
*
* Do not use this function for huge files.
*/
public fun Reader.readLines(): List<String> {
val result = arrayListOf<String>()
forEachLine { result.add(it) }
return result
}
答案 1 :(得分:0)
两个不同的部分:
对于1,您可以使用Java的getResource
:
val dir = File( object {}.javaClass.getResource(directoryPath).file )
对于2,您可以使用Kotlin的File.walk
扩展功能,该功能返回sequence
可以处理的文件,例如:
dir.walk().forEach { f ->
if(f.isFile) {
println("file ${f.name}")
} else {
println("dir ${f.name}")
}
}
答案 2 :(得分:-1)
这是我找到的一个非常简单的解决方案。
File("/path/to/file.txt")
// make an iterable file tree
.walk()
// only files no directories
.filter { it.isFile }
// last modified from top to bottom (most recent on top)
.sortedByDescending { it.lastModified() }
// do things on the files
.forEachIndexed {
i, it ->
// use the most recent file and delete the other ones
if (i == 0) {
useMe(it)
} else {
it.delete()
}
}