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