2013-06-02 46 views

回答

6

我相信你不能改变的eachFile()顺序,但可以达到预期的效果。

考虑:

new File("desired dir").listFiles().sort{ it.name }.reverse().each { def f -> 
    println f.name 
} 
+1

'的println f.class'将打印'java.io.File'所有文件。 :)。建议编辑,'println f.name'? – dmahapatro

+0

注意。谢谢.... –

+0

注意:'listFiles()'[不**不保证](http://docs.oracle.com/javase/6/docs/api/java/io/File.html#listFiles %28%29)文件的顺序!如果你想保证顺序,你需要在反向之前插入'.sort()'。 (或只是使用倒转的封闭进行排序。) – OverZealous

1

不能使用eachFile直接,但它是非常简单的来执行此使用listFiles和手动排序:

new File(path_to_file).listFiles().sort{a,b -> b.name <=> a.name}.each{ File f -> 
    println f.name 
} 

这里是被倒置sort{}的关键。 (如果你只是使用上listFiles()reverse(),你不能保证从文件系统的任何特定的顺序 - 文件可能会在系统特定的顺序)

注意,排序是区分敏感 - 你可以做一个区分不敏感的排序是这样的:

new File(path_to_file).listFiles().sort{a,b -> b.name.compareToIgnoreCase(a.name)}.each{ File f -> 
    println f.name 
} 

的Groovy 2.1.3下进行测试。

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()) 
    }