我有一个包含xml Files的目录:
20140110-093721565_TOTO.xml
20140110-093821565_TATA.xml
20140110-094021565_TOTO.xml
20140110-091021565_TOTO.xml
20140110-093921565_TATA.xml
....
20140110-091021565_TETE.xml
文件名的第一部分表示生成文件的时间:20140110-09102156
20140110 = Date
09102156 = Hour
最后一部分用于标识文件:TOTO
我想要列出的是每个文件的最新版本,例如:
20140110-091021565_TOTO.xml
20140110-093821565_TATA.xml
如何定义FileNameFilter?
我不确定是否有一种方法可以提供过滤器来将结果限制为一个,因为文件名是不断变化的。这是一种实现您想要的东西的方法。
File f = new File("C:\\"); // what ever directory you want.
FilenameFilter totoFilter = new FilenameFilter()
{
public boolean accept(File dir, String name)
{
String lowercaseName = name.toLowerCase();
if (lowercaseName.endsWith("TOTO.xml")) return true;
else return false;
}
};
FilenameFilter tataFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
String lowercaseName = name.toLowerCase();
if (lowercaseName.endsWith("TOTO.xml")) return true;
else return false;
};
String[] tataFiles = f.list(tataFilter);
Arrays.sort(tataFiles, Collections.reverseOrder());
String[] totoFiles = f.list(totoFilter);
Arrays.sort(totoFiles, Collections.reverseOrder());
System.out.println(tataFiles[0]);
System.out.println(totoFiles[0]);
}
我编写了一种替代逻辑,即使您必须添加类型,它也可以帮助您用更少的新行扩展想要实现的目标。这遵循了我在评论中提到的方法。您所要做的就是向数组列表添加新序列,该序列定义了另一种文件类型。
File f = new File("C:\\"); // current directory
ArrayList<String> sequence = new ArrayList<>();
sequence.add("TATA");
sequence.add("TOTO");
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
String lowercaseName = name.toLowerCase();
if (lowercaseName.endsWith(".xml"))
return true;
else
return false;
}
};
String[] totoFiles = f.list(filter);
Arrays.sort(totoFiles, Collections.reverseOrder());
for (String type : sequence) {
int i = 0;
for (; i < totoFiles.length; i++) {
if (totoFiles[i].contains(type))
break;
}
System.out.println(totoFiles[i]);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句