如何在 Kotlin 中获取按字母顺序排序的文件列表?
How to get an alphabetically sorted list of files in Kotlin?
所以我有一堆文本文件,其中的内容需要阅读并打印到文本视图中。我目前正在使用 .list() (java.io.File) 来获取给定目录中文件的列表(它输出一个文件名字符串数组)。然后我遍历数组并逐一读取内容。
问题是,我需要按字母顺序降序排列文件(文件是日志,我需要首先显示最新的日志 - 文件名是时间戳 -(例如 20220414221311)- YYYYMMDDHHMMSS)。
.list 函数似乎是随机排序的。
我试过将名字放在一个列表中,然后对其进行排序,但没有成功。有人可以帮忙吗?
这是没有任何顺序的代码:
fun ui() {
setContentView(R.layout.activity_main)
val dir = getExternalFilesDir(null);
val attendancedir = File("$dir/attendance")
var attendancelist = attendancedir.list()
val scroll = findViewById<View>(R.id.SCROLL) as LinearLayout
for (attendancefile in attendancelist) {
val attendancedisplay = File("$dir/attendance/$attendancefile")
val tv = TextView(this)
tv.text = attendancedisplay.readText()
scroll.addView(tv)
}
如果您需要按字母顺序对列表进行排序,可以使用 Kotlin 运算符 sortWith 和 compareTo。它应该看起来像:
attendancelist.sortWith { text1, text2 ->
text1.compareTo(text2, ignoreCase = true)
}
但如果您需要根据时间戳对列表进行排序 'YYYYMMDDHHMMSS',我可以建议您采取后续步骤:
- 将您的字符串列表转换为日期列表。
- 排序日期列表。
- 将日期列表转换回字符串列表(或操作日期列表)。
下一个代码示例:
private val sdf = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault())
private fun ui() {
val dir = getExternalFilesDir(null);
val attendancedir = File("$dir/attendance")
val attendancelist = attendancedir.list()
val sortedList = getSortedList(attendancelist)
// do operations with sortedList
}
private fun getSortedList(attendancelist: Array<out String>): List<String?> {
return attendancelist.map { text -> // convert your string list to date list
sdf.parse(text)
}.sortedWith { date1, date2 -> // sort date list
date1.compareTo(date2)
}.map { date -> // convert date list back to string list
date?.let { sdf.format(it) }
}
}
所以我有一堆文本文件,其中的内容需要阅读并打印到文本视图中。我目前正在使用 .list() (java.io.File) 来获取给定目录中文件的列表(它输出一个文件名字符串数组)。然后我遍历数组并逐一读取内容。
问题是,我需要按字母顺序降序排列文件(文件是日志,我需要首先显示最新的日志 - 文件名是时间戳 -(例如 20220414221311)- YYYYMMDDHHMMSS)。
.list 函数似乎是随机排序的。
我试过将名字放在一个列表中,然后对其进行排序,但没有成功。有人可以帮忙吗?
这是没有任何顺序的代码:
fun ui() {
setContentView(R.layout.activity_main)
val dir = getExternalFilesDir(null);
val attendancedir = File("$dir/attendance")
var attendancelist = attendancedir.list()
val scroll = findViewById<View>(R.id.SCROLL) as LinearLayout
for (attendancefile in attendancelist) {
val attendancedisplay = File("$dir/attendance/$attendancefile")
val tv = TextView(this)
tv.text = attendancedisplay.readText()
scroll.addView(tv)
}
如果您需要按字母顺序对列表进行排序,可以使用 Kotlin 运算符 sortWith 和 compareTo。它应该看起来像:
attendancelist.sortWith { text1, text2 ->
text1.compareTo(text2, ignoreCase = true)
}
但如果您需要根据时间戳对列表进行排序 'YYYYMMDDHHMMSS',我可以建议您采取后续步骤:
- 将您的字符串列表转换为日期列表。
- 排序日期列表。
- 将日期列表转换回字符串列表(或操作日期列表)。
下一个代码示例:
private val sdf = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault())
private fun ui() {
val dir = getExternalFilesDir(null);
val attendancedir = File("$dir/attendance")
val attendancelist = attendancedir.list()
val sortedList = getSortedList(attendancelist)
// do operations with sortedList
}
private fun getSortedList(attendancelist: Array<out String>): List<String?> {
return attendancelist.map { text -> // convert your string list to date list
sdf.parse(text)
}.sortedWith { date1, date2 -> // sort date list
date1.compareTo(date2)
}.map { date -> // convert date list back to string list
date?.let { sdf.format(it) }
}
}