I'm not sure there is a way to provide filter that will restrict the result to just one in your case because the file names are ever variying. Here is one way to acheive what you wanted.
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]);
}
I have written an alternative logic that can help you extend what you want to achieve with less number of new lines even when you have to add types. This follows the approach I mentioned in the comment. All you have to do is add new sequence that defines another type of file to array list.
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]);
}