简单的分步指南:
- 从文件系统中获取文件名,使用
new File("myDirName").list()
- 将该列表排序为使用自定义比较器创建的 TreeSet(见下文)。
- 遍历集合,按顺序处理您的文件,但不包括您已经看过的文件。用于
myTreeSet.tailSet(lastFileToNotProcess, 'true')
获取仅包含这些元素的集合的视图。
有趣的部分在步骤 2 中。这是一个自定义比较器,它标记其输入并按数字比较整数标记,并按字母顺序比较非整数标记:
class TokenizingComparator implements Comparator<String> {
private String separator;
private static Pattern intPattern = Pattern.compile("[0-9]+");
public TokenizingComparator(String separator) { this.separator = separator; }
public int compare(String a, String b) {
String pa[] = a.split(separator);
String pb[] = b.split(separator);
for (int ia=0, ib=0; ia<pa.length && ib<pb.length; ia++,ib++) {
int rc = comparePart(pa[ia], pb[ib]);
if (rc != 0) return rc;
}
return (pa.length != pb.length) ?
pa.length - pb.length : 0;
}
private comparePart(String a, String b) {
if (intPattern.matcher(a).matches() && intPattern.matcher(b).matches()) {
return Integer.parseInt(a) - Integer.parseInt(b);
} else {
return a.compareTo(b);
}
}
}