从特定目录读取文件,并将所有文件名存储在arraylist中
File directory = new File(path);
File[] listOfFiles = directory.listFiles();
int fileCount = directory.list().length;
List<String> files = new ArrayList<>();
for (int i = 0; i < fileCount; i++) {
String inputFilePath = path + listOfFiles[i].getName();
String inputFileName = listOfFiles[i].getName();
files.add(inputFileName);
}我期望按顺序(升序)存储文件,但实际情况是
1.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
2.jpg
20.jpg
21.jpg
22.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg让我知道如何像1,2,3,4,5....10,11....20,21...etc.,)一样以升序存储文件
发布于 2018-09-12 17:55:26
您可以将与一个自定义比较器一起使用,它会比较每个文件名的整数前缀,如ArrayList files上的下面所示:
Collections.sort(files, new Comparator<String>() {
public int compare(String s1, String s2) {
int s1Num = Integer.valueOf(s1.split("[.jpg]")[0]);
int s2Num = Integer.valueOf(s2.split("[.jpg]")[0]);
if (s1Num == s2Num) { return 0; }
else if (s1Num < s2Num) { return -1; }
else { return 1; }
}
});
for (String file: files) {
System.out.println(file);
}输出:
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
20.jpg
21.jpg
22.jpg发布于 2018-09-12 17:34:26
您希望按文件对象的名称以升序对其进行排序。你需要创建你的文件名比较器。这里是伪代码。
class FileNameComparator implements Comparator<File> {
private final Pattern NUMERIC_PART_PATTER = Pattern.compile("([0-9]+)[.]");
@Override
public int compare(File file1, File file2) {
String name1 = file1.getName();
String name2 = file2.getName();
int part1 = retrieveNumericPart(name1);
int part2 = retrieveNumericPart(name2);
return part1 - part2;
}
private int retrieveNumericPart(String str) {
Matcher matcher = NUMERIC_PART_PATTER.matcher(str);
if (!matcher.find()) {
return 0;
}
String group = matcher.group(1);
return Integer.parseInt(group);
}
}然后使用这个比较器。
File[] sortedFiles = Arrays.sort(listOfFiles, new FileNameComparator());然后你可以遍历你的文件,它们会按照你想要的方式进行排序!如果没有比较器,您将获得按字母顺序排序的字符串列表(因为默认情况下字符串是排序的)。
发布于 2018-09-12 17:36:10
当然是按这个顺序的。这些文件不是按算术顺序排序的,而是按字典顺序排序的。您必须重命名所有单位数文件以包含前导零以达到预期的顺序,或者编写自定义排序方法并将其应用于包含您的文件名的列表。
https://stackoverflow.com/questions/52291695
复制相似问题