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

时间:2016-04-01 15:12:52

标签: java

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

该程序运行正常,但问题出现在挑选文件的方式。在我的目录中,当我进行排序时,显示的第一个文件是file5521.3,但在我的程序中,拾取的第一个文件是file5521.100。这太令人困惑了。

我也尝试使用Arrays.sort(list, NameFileComparator.NAME_COMPARATOR),但它也提供了与之前相同的结果。

以下是我的代码。

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());
}

请让我知道我该怎么做。

上次修改日期的工作解决方案

Arrays.sort(list, new Comparator<File>() {
            public int compare(File f1, File f2) {
                return Long.compare(f1.lastModified(), f2.lastModified());
            }
        });

Comparator在上次修改日期时效果很好,但是当我尝试下面的代码时。结果与之前相同。

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

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

        });

在我的Windows资源管理器中它看起来像下面。我已经对文件名进行了排序。

enter image description here

我的控制台输出显示如下。

enter image description here

由于

2 个答案:

答案 0 :(得分:1)

If your OS is Windows XP or later, your files will be sorted using Numerical File Name Sorting.

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

  1. 按照链接中的步骤使用经典文字排序,这将改变文件资源管理器显示文件的方式。
  2. 创建一个您传递到Comparator的自定义sort,该df = pd.read_csv('swarm.csv', header=[0, 1], tupleize_cols=True, index_col=None) cols = ['sizes', 'distance_measure'] df.columns = pd.MultiIndex.from_tuples(df.columns, names=cols) sizes 1 2 distance_measure 0 1 0 0 -2.1881 1.262 -2.7001 1 -2.3671 1.699 -2.4431 2 -2.3071 0.716 -2.2841 3 -2.2521 0.967 -1.9451 4 -2.4651 1.800 -2.3421 将根据该数字的实际值进行排序(例如3将在10之前,因为3 <10)

答案 1 :(得分:1)

您可以使用 Apache Commons IO 使用许多预定义Comparator对文件进行排序,甚至可以使用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);

...和here is the list of available comparators