Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java .listFiles()可以在不同的系统上以不同的顺序返回文件_Java - Fatal编程技术网

Java .listFiles()可以在不同的系统上以不同的顺序返回文件

Java .listFiles()可以在不同的系统上以不同的顺序返回文件,java,Java,作为处理的结果,一些数据文件被写入磁盘 两台服务器(MAC和Linux)之间的文件计数匹配 系统之间的文件名相同 通过md5sum测量,系统之间的文件内容是相同的 然后,根据从所述文件读取的内容,使用 for (File f : contentDirectory.listFiles()) { // magic .listFiles()javadoc说: 无法保证结果数组中的名称字符串 将以任何特定顺序出现;尤其不是,, 保证按字母顺序出现 虽然这是真的

作为处理的结果,一些数据文件被写入磁盘

  • 两台服务器(MAC和Linux)之间的文件计数匹配
  • 系统之间的文件名相同
  • 通过md5sum测量,系统之间的文件内容是相同的
然后,根据从所述文件读取的内容,使用

    for (File f : contentDirectory.listFiles()) {
               // magic
.listFiles()
javadoc说:

无法保证结果数组中的名称字符串 将以任何特定顺序出现;尤其不是,, 保证按字母顺序出现

虽然这是真的,但我想知道。。。文件列出的顺序不是随机的,对吗?我的意思是,两次列出相同的文件将产生相同的结果,对吗

这是否意味着当文件在两个不同的系统上列出时,顺序可能不一样


归根结底,更大的问题是,如何在一个目录中以相同的顺序列出文件,而不管文件存储在哪个操作系统上?

他们不保证顺序。所以不要依赖它。即使您可以验证它今天是否有效,明天也可能无效。或者在包含超过4K文件的列表上。或者其他一些你不知道的随机标准


如果你想要订单,那很容易。在遍历列表之前对其进行排序。

我希望顺序取决于本地JVM和/或本地文件系统的实现细节。最有可能的情况是,这些文件按与该文件夹的文件系统目录相同的顺序列出,这可能取决于文件添加到文件夹的顺序或其他此类详细信息

如果您的程序依赖于文件的特定顺序,那么最好的办法是获取文件名列表,按您喜欢的方式对其进行排序,然后打开文件。这样,您就不依赖于本地实现的详细信息。

公共类文件实现了可序列化、可比较的
public class File  implements Serializable, Comparable<File>
java.util.Collections.sort()
因此,如果您将文件转储到一个列表中,它将很好地工作


阅读Java7的发行说明,您将看到一些“不保证”更改的情况,以及其他一些“非公共”api被删除或更改的情况。如果医生说你不能依靠它,你就不能依靠它。它可以在任何主要或次要版本中更改。

只需对文件进行排序即可<代码>文件具有可比性,因此我们甚至不需要比较器:

File[] files = File.listRoots()[0].listFiles();
Arrays.sort(files);
System.out.println(Arrays.asList(files));
(本例仅从第一个根目录获取文件,每个计算机上都应该有一些内容;)

另类

文件对象应该是唯一的,以便我们可以创建树集:

for (File file : new TreeSet<File>(Arrays.asList(contentDirectory.listFiles()))) {
    System.out.println(file.getName());  // replace with magic ;)
}
for(文件:新树集(Arrays.asList(contentDirectory.listFiles())){
System.out.println(file.getName());//替换为magic;)
}