我正在写一个代码,其中包含一堆必须从目录中作为输入的文件。
该程序运行正常,但问题出现在挑选文件的方式。在我的目录中,当我进行排序时,显示的第一个文件是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资源管理器中它看起来像下面。我已经对文件名进行了排序。
我的控制台输出显示如下。
由于
答案 0 :(得分:1)
If your OS is Windows XP or later, your files will be sorted using Numerical File Name Sorting.
由于您希望在程序和文件资源管理器中匹配文件顺序,您可以:
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);