有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVA尼奥。file Java读取文件名并按升序存储

从特定目录读取文件,并将所有文件名存储在arraylist中

File directory = new File(path);
        File[] listOfFiles = directory.listFiles();
        int fileCount = directory.list().length;
        List<String> files = new ArrayList<>();
        for (int i = 0; i < fileCount; i++) {
            String inputFilePath = path + listOfFiles[i].getName();
            String inputFileName = listOfFiles[i].getName();
            files.add(inputFileName);
        }

我希望按顺序(升序)存储文件,但实际是

1.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
2.jpg
20.jpg
21.jpg
22.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg

让我知道如何以升序存储文件,如1,2,3,4,5....10,11....20,21...etc.,)


共 (1) 个答案

  1. # 1 楼答案

    您希望按文件对象的名称按升序对其进行排序。您需要创建文件名比较器。这里是伪代码

    class FileNameComparator implements Comparator<File> {
    
        private final Pattern NUMERIC_PART_PATTER = Pattern.compile("([0-9]+)[.]");
    
        @Override
        public int compare(File file1, File file2) {
            String name1 = file1.getName();
            String name2 = file2.getName();
            int part1 = retrieveNumericPart(name1);
            int part2 = retrieveNumericPart(name2);
            return part1 - part2;
        }
    
        private int retrieveNumericPart(String str) {
            Matcher matcher = NUMERIC_PART_PATTER.matcher(str);
            if (!matcher.find()) {
                return 0;
            }
    
            String group = matcher.group(1);
            return Integer.parseInt(group);
        }
    }
    

    那就用这个比较器

    File[] sortedFiles = Arrays.sort(listOfFiles, new FileNameComparator());
    

    然后你可以循环浏览你的文件,它们会按照你想要的排序!如果没有比较器,您将得到按字母顺序排序的字符串列表(默认情况下字符串是按字母顺序排序的)