如何在Windows资源管理器中获得java.io.File.list()
相同的订单?
在我创建Temp
文件夹的程序中,例如Temp1
,Temp2
等等。但是,当我使用java.io.File.list()
检索文件夹列表时,它会显示为Temp1
,Temp10
等等。
请告诉我们如何获得与Windows资源管理器中显示的订单相同的订单?
由于
答案 0 :(得分:7)
Windows资源管理器默认显示按名称排序的文件。查看File.list()
的javadoc,
无法保证结果数组中的名称字符串将以任何特定顺序出现;特别是,它们不会保证按字母顺序出现。
因此,在使用File.list()
获取文件列表后,您需要按文件名Arrays.sort(file.list())
对其进行排序,以获得所需的订单。
答案 1 :(得分:0)
您需要编写自己的比较器。比较器需要拆分文件名字符串,将它们分成连续的非数字字符和数字字符的序列。然后对序列进行排序,在比较之前将数字字符序列转换为整数。此外,如果整数相等(由于前导零),则在较短的序列之前对较长的数字序列进行排序。
答案 2 :(得分:0)
这是一种称为自然排序的特定窗口排序算法的实现。
Java - Sort Strings like Windows Explorer
简而言之,它将两个字符串拆分为Letter - Digit Parts中的比较,并以特定的方式比较这些部分以实现这种排序。