自然排序,使用与window下的排序保持一致,99后排100而不是10后排100
python 实现: 使用三方类库 pip3 install natsort
from natsort import ns,natsorted
# 获取目录中的文件列表
    files = os.listdir(directory)
    # 使用sorted函数和自定义的排序键进行排序
    sorted_files = natsorted(files, alg=ns.PATH)
Java 实现:
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
public class test {
    public static void main(String[] args) throws Exception {
        String path="E:\\YCWork\\省网";
        traverseDirectory(new File(path));
    }
    public static void traverseDirectory(File dir) {
        if (!dir.exists() || !dir.isDirectory()) {
            System.out.println("目录不存在或不是有效目录");
            return;
        }
        File[] files = dir.listFiles();
        if (files != null) {
            System.out.println("\n=== 自然排序结果 ===");
            Arrays.sort(files, new NaturalOrderComparator2());
            //字典序排序
            //Arrays.sort(files, Comparator.naturalOrder());
            for (File file : files) {
                if (file.isDirectory()) {
                    System.out.println("目录: " + file.getAbsolutePath());
                    traverseDirectory(file);
                } else {
                    System.out.println("文件: " + file.getAbsolutePath());
                }
            }
        }
    }
    static class NaturalOrderComparator implements Comparator<File> {
        @Override
        public int compare(File a, File b) {
            String s1 = a.getName();
            String s2 = b.getName();
            int i1 = 0, i2 = 0;
            while (i1 < s1.length() && i2 < s2.length()) {
                char c1 = s1.charAt(i1);
                char c2 = s2.charAt(i2);
                if (Character.isDigit(c1) && Character.isDigit(c2)) {
                    int num1 = 0, num2 = 0;
                    while (i1 < s1.length() && Character.isDigit(s1.charAt(i1))) {
                        num1 = num1 * 10 + (s1.charAt(i1++) - '0');
                    }
                    while (i2 < s2.length() && Character.isDigit(s2.charAt(i2))) {
                        num2 = num2 * 10 + (s2.charAt(i2++) - '0');
                    }
                    if (num1 != num2) return num1 - num2;
                } else {
                    if (c1 != c2) return c1 - c2;
                    i1++;
                    i2++;
                }
            }
            return s1.length() - s2.length();
        }
    }
    static class NaturalOrderComparator2 implements Comparator<File> {
        @Override
        public int compare(File f1, File f2) {
            String s1 = f1.getName();
            String s2 = f2.getName();
            // 分割字符串为数字和非数字部分
            String[] parts1 = s1.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
            String[] parts2 = s2.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
            for (int i = 0; i < Math.min(parts1.length, parts2.length); i++) {
                // 数字部分比较数值大小
                if (parts1[i].matches("\\d+") && parts2[i].matches("\\d+")) {
                    int num1 = Integer.parseInt(parts1[i]);
                    int num2 = Integer.parseInt(parts2[i]);
                    if (num1 != num2) return num1 - num2;
                } else {
                    // 非数字部分按字典序比较
                    int cmp = parts1[i].compareToIgnoreCase(parts2[i]);
                    if (cmp != 0) return cmp;
                }
            }
            return parts1.length - parts2.length;
        }
    }
}