我正在使用eachFile(),但我试图颠倒迭代发生的顺序。我怎么做?现在,它似乎对文件列表进行排序,然后按排序顺序处理每个文件。我基本上想要保留 - 对该列表进行排序并从最后开始。
答案 0 :(得分:8)
我相信你不能改变eachFile()
的顺序,但你可以达到预期的效果。
考虑:
new File("desired dir").listFiles().sort{ it.name }.reverse().each { def f ->
println f.name
}
答案 1 :(得分:1)
您无法直接使用eachFile
,但使用listFiles
和手动排序执行此操作非常简单:
new File(path_to_file).listFiles().sort{a,b -> b.name <=> a.name}.each{ File f ->
println f.name
}
这里的关键是被倒置的sort{}
。 (如果您只在reverse()
上使用listFiles()
,则无法保证文件系统中的任何特定订单 - 文件可能是系统特定的订单。)
请注意,该类型是敏感 - 您可以像这样执行case- unsensitive 排序:
new File(path_to_file).listFiles().sort{a,b -> b.name.compareToIgnoreCase(a.name)}.each{ File f ->
println f.name
}
在Groovy 2.1.3下测试。
答案 2 :(得分:1)
我知道最简单的方法是
def allFiles = new File('desired directory').listFiles()?.sort{a, b ->
-(a.name <=> b.name)
}
eachFile
无法在闭包中使用sort
。
明确使用sort
的好处是您可以根据排序标准对文件进行排序。例如,根据文件的lastModified
日期对文件进行排序: -
def allFiles = new File('desired directory').listFiles()?.sort{a, b ->
a.lastModified() <=> b.lastModified()
//to reverse sort on lastModified date use below
//-(a.lastModified() <=> b.lastModified())
}