我编写了以下程序,它读取目录中的所有文件。 所有文件名均由数字组成(例如 10023134.txt)。
File dir = new File(directoryPath);
File[] files = dir.listFiles();
for (File file : files)
try {
if ( !file.exists())
continue;
else if (file.isFile()) {
// some process
}
} catch (Exception e) {}
我想知道默认情况下读取目录中的文件的顺序是怎样的。
程序似乎既不按数字顺序也不按创建日期顺序读取文件。
文件的顺序可能是操作系统默认(或列出中性)顺序,并且取决于操作系统如何将文件列表返回给 Java。
不保证文件返回的顺序。
阅读完列表后,您可以使用
Arrays.sort(T[] Comparator<? super T> c)
对列表进行排序。
文件按照操作系统的自然顺序排序。这可能是创作顺序。 如果您想对列表进行排序,可以致电
File[] files = Arrays.sort(dir.listFiles())
对于其他排序顺序,请随意使用您自己的
Comparator
。
问候。
顺序实际上取决于文件系统。我们以 Java 8 和 Linux 为例。
listFiles()
的实现实际上在内部调用了本机方法 java.io.FileSystem#list
。查看 jdk\src\solaris\native\java\io\UnixFileSystem_md.c
的实现,我们发现它调用了 POSIX readdir64_r
,它是 readdir
的变体。从https://utcc.utoronto.ca/%7Ecks/space/blog/unix/ReaddirOrder,我们可以知道顺序实际上是底层文件系统的traversal order
。