Java File.list()一致的顺序?

kyu*_*yun 5 java

这是一个非常糟糕的问题(在我看来),我尽力找到自己有用的文档,运气不好 - 无论如何,这里是:

我有代码需要对目录中的所有文件执行某些操作.我在File对象中设置目录,并使用fileObject.list()迭代目录中的文件.我让这段代码在一夜之间运行,并且(经过多次骚动)在某些时候崩溃了.我想弄清楚这发生了什么事(是的,我记录得很糟糕).现在,根据这个javadoc,在列出文件时无法保证订单(按字母顺序或其他方式),我想知道是否有任何一致性保证?这意味着当我运行相同的代码两次时,我会得到完全相同的文件顺序吗?逻辑告诉我它应该并且我已经恢复了基于此的操作,但我对此持怀疑态度.此外,我很好奇javadoc中"没有具体的订单意味着什么".

Mik*_*uel 13

该语言意味着您不应该依赖订单的任何属性,包括从运行到运行的一致性.

如果某些内存数据结构中存在链接的文件列表,则驱动程序可能会将最近访问的文件移动到列表的前面,以优化重复的文件访问.即使没有修改文件,这也可能会更改列出文件的顺序.

如果您想要一致的订单,您可以做类似的事情

Arrays.sort(
   myFileArray,
   new Comparator<File>() {
     public int compare(File a, File b) {
       return a.getName().compareTo(b.getName());
     }
   });
Run Code Online (Sandbox Code Playgroud)

  • 可能值得研究java 7的新"WatchService"API.http://stackoverflow.com/questions/494869/file-changed-listener-in-java/494957#494957 (4认同)