【问题标题】:Files not being sorted correctly文件未正确排序
【发布时间】:2015-11-08 12:50:30
【问题描述】:

我知道我的标题有点误导,但我真的不知道该怎么说。

基本上我有一个包含图像的文件夹,其名称为:0.png 到 100.png。当我尝试使用以下方法加载它们时:

 public static void buildImageList() {
    Main.log("Building list of image files...");
    File[] files = new File(Constants.getImageLocation()).listFiles();
    int id = 0;
    for (File file : files) {
        if (file.isDirectory()) {
            continue;
        }
        if (!file.getName().contains(".png") && !file.getName().contains(".jpg") && !file.getName().contains(".jpeg") && !file.getName().contains(".PNG")) {
            continue;
        }
        imageFiles.add(new FileImage(id, fileToByteArray(file)));
        id++;
    }
    Main.log("Found " + imageFiles.size() + " images in the folder!");
}

我得到的文件不是按顺序排列的:0.png、1.png、10.png、11.png 等等。

我需要更改哪些内容才能获得 0.png、1.png、2.png、3.png?

【问题讨论】:

  • 那是因为文件名是String类型
  • 你得到了字符串的自然顺序。要获得不同的东西,您必须将所有文件名读入一个列表并使用比较器对其进行排序,该比较器采用文件名的前缀并将其与其他文件名进行数字比较。
  • 你怎么知道文件的顺序?您的代码 sn-p 仅打印国家/地区。

标签: java list file


【解决方案1】:

最简单的方法是使用:

Arrays.sort(files);

java.io.File 实现 Comparable 接口,按字典顺序比较路径名。排序实际上取决于操作系统。如果您需要任何自定义排序逻辑,您可以为 Arrays#sort() 方法提供自定义比较器:

Arrays.sort(files, new CustomFileNameOrderingComparator());

【讨论】:

    【解决方案2】:

    感谢您的指导,我已使用以下代码修复它:

     Arrays.sort(files, (o1, o2) -> {
            final int id1 = Integer.parseInt(o1.getName().substring(0, o1.getName().indexOf(".")));
            final int id2 = Integer.parseInt(o2.getName().substring(0, o2.getName().indexOf(".")));
            final int result = Integer.compare(id1, id2);
            return result != 0 ? result : (id1 - id2);
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      相关资源
      最近更新 更多