Java 按目录中相同的顺序获取输入文件

Java 按目录中相同的顺序获取输入文件,java,Java,我正在写一个代码,其中有一堆文件必须作为目录的输入 该程序运行良好,但问题出现在文件的拾取方式上。在我的目录中进行排序时,显示的第一个文件是file5521.3,但在我的程序中,拾取的第一个文件是file5521.100。这很令人困惑 我也尝试过使用数组.sort(list,NameFileComparator.NAME\u COMPARATOR),但它也给出了与前面相同的结果 Arrays.sort(list, new Comparator<File>() {

我正在写一个代码,其中有一堆文件必须作为目录的输入

该程序运行良好,但问题出现在文件的拾取方式上。在我的目录中进行排序时,显示的第一个文件是
file5521.3
,但在我的程序中,拾取的第一个文件是
file5521.100
。这很令人困惑

我也尝试过使用
数组.sort(list,NameFileComparator.NAME\u COMPARATOR)
,但它也给出了与前面相同的结果

Arrays.sort(list, new Comparator<File>() {

            @Override
            public int compare(File o1, File o2) {
                return o1.getName().compareTo(o2.getName());
            }

        });
下面是我的代码

void countFilesInDirectory(File directory, String inputPath) throws IOException {
    File[] list = directory.listFiles();
    Arrays.sort(list, NameFileComparator.NAME_COMPARATOR);
    for (int i = 0; i < list.length; i++) {
        System.out.println(list[i]);
    }
    tempPath = inputPath.substring(0, inputPath.lastIndexOf("\\") + 1) + "OP\\";
    File outPath = new File(tempPath);
    if (!outPath.exists()) {
        outPath.mkdir();
    }
    File temp = new File(tempPath + "temp.txt");
    FileOutputStream fos = new FileOutputStream(temp);

    if (!temp.exists()) {
        temp.createNewFile();
    }
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));

    for (int i = 0; i < list.length; i++) {
        System.out.println(list[i]);
        setStatusText(i);
        GenerateFiles(list[i].getAbsoluteFile().toString(), bw);
    }
    bw.write("</body>");
    bw.close();
    File newFile = new File(temp.getParent(), "Index.html");
    Files.move(temp.toPath(), newFile.toPath());
}
在我的Windows资源管理器中,它如下所示。我已经对文件名进行了排序

我的控制台输出如下所示

谢谢

由于要匹配程序和文件资源管理器中的文件顺序,您可以:

  • 按照链接中的步骤使用经典文字排序,这将更改文件资源管理器显示文件的方式
  • 创建一个自定义的
    比较器
    ,传递到
    排序
    ,该比较器将根据数字的实际值进行排序(例如,3将位于10之前,因为3<10)

  • 您可以使用ApacheCommons IO来使用许多预定义的比较器对文件进行排序,甚至可以使用CompositeFileComparator将这些文件组合起来

    以下是一个例子:

    import org.apache.commons.io.comparator.*;
    
    File dir = new File(".");
    File[] files = dir.listFiles();
    File[] filesSorted = DefaultFileComparator.DEFAULT_COMPARATOR.sort(files);
    File[] filesReversed = DefaultFileComparator.DEFAULT_REVERSE.sort(files);
    

    。。。而且

    为什么处理顺序很重要?如果确实如此,那么文件名约定应该反映这一点,以避免目录和基于字符串的排序的差异,从而使其完全相同。您的操作系统是什么,您所说的“在我的目录中,当我进行排序时,显示的第一个文件是”是什么意思?文件的顺序将由您用来查看它们的任何软件决定(例如Windows上的资源管理器)。您需要使用使用相同逻辑的比较器。Hi@RC。我的意思是,在我的Windows资源管理器中,当我单击标题栏时,名称会被排序。当我这样做时,它会给我一些错误,说
    方法排序(文件[])类型比较器未定义。嗨,朋友,我已经用我尝试过的代码更新了我的问题。你能看看吗。@Rakesh你看到的是词法排序的结果。使用词法排序对字符串进行排序会产生以下A1import org.apache.commons.io.comparator.*;
    
    File dir = new File(".");
    File[] files = dir.listFiles();
    File[] filesSorted = DefaultFileComparator.DEFAULT_COMPARATOR.sort(files);
    File[] filesReversed = DefaultFileComparator.DEFAULT_REVERSE.sort(files);