我在一个文件夹中有一组文件,并且它们都以类似名称开头,除了一个。这里有一个例子:如何按升序对文件名进行排序?
Coordinate.txt
Spectrum_1.txt
Spectrum_2.txt
Spectrum_3.txt
.
.
.
Spectrum_11235
我能够从指定的文件夹列表中的所有文件,但列表不在谱号的升序排列。示例:执行程序时得到以下结果:
Spectrum_999.txt
Spectrum_9990.txt
Spectrum_9991.txt
Spectrum_9992.txt
Spectrum_9993.txt
Spectrum_9994.txt
Spectrum_9995.txt
Spectrum_9996.txt
Spectrum_9997.txt
Spectrum_9998.txt
Spectrum_9999.txt
但是这个顺序是不正确的。 Spectrum_999.txt后应该有Spectrum_1000.txt文件。谁能帮忙?这里是代码:
import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class FileInput {
public void userInput()
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the file path: ");
String dirPath = scanner.nextLine(); // Takes the directory path as the user input
File folder = new File(dirPath);
if(folder.isDirectory())
{
File[] fileList = folder.listFiles();
Arrays.sort(fileList);
System.out.println("\nTotal number of items present in the directory: " + fileList.length);
// Lists only files since we have applied file filter
for(File file:fileList)
{
System.out.println(file.getName());
}
// Creating a filter to return only files.
FileFilter fileFilter = new FileFilter()
{
@Override
public boolean accept(File file) {
return !file.isDirectory();
}
};
fileList = folder.listFiles(fileFilter);
// Sort files by name
Arrays.sort(fileList, new Comparator()
{
@Override
public int compare(Object f1, Object f2) {
return ((File) f1).getName().compareTo(((File) f2).getName());
}
});
//Prints the files in file name ascending order
for(File file:fileList)
{
System.out.println(file.getName());
}
}
}
}
这是如何得到这么多upvotes?它无法正确地对问题中的输入列表进行排序,其中包括前缀不相同的文件,例如'Coordinate.txt' –
@LukasEder'这是一个非常基本的做法。此代码使用简单的字符串操作来提取数字。如果你知道文件名的格式,在你的情况下Spectrum_.txt。提取的一种更好的方法是使用正则表达式。“这里的答案并不意味着提供完全正常的生产质量代码,而不是提供有关如何解决问题的提示以及最终的基本代码示例。我希望我能回答你的问题。 –
A4L
*“这里的答案并不意味着提供完整的生产质量代码”* - 那么,这是一个方法。另一种情况是:根据OP的要求,这根本就是错误的,而且很容易得到正确的结果:-) –