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