I would usually prefer to return a File instead of a String. That way you don't have to create a new file each time you want to work with it and you can access for example the file name (.getName() > foo.txt) or the whole path (getPath() > /dir/foo.txt) depending on what you need.
File already has a built-in filter functionality, either working on the file as String (FileNameFilter) or on the File itself (FileFilter). As above, I would prefer working on the File.
Implementing a FileFilter is pretty simple.
private static class ExtensionFilter implements FileFilter {
private final String extension;
public ExtensionFilter(String extension) {
// store ".TXT"
this.extension = "." + extension.toUpperCase(Locale.ROOT);
}
@Override
public boolean accept(File pathname) {
// return true if it is a file and it ends with .TXT
return pathname.isFile() && pathname.getName().toUpperCase(Locale.ROOT).endsWith(extension);
}
}
Now add some methods that use such a filter and you are pretty much done.
// internal method that lists files, converts them into a List and makes sure it does not return null
private static List<File> listFilesWithExtension(File directory, ExtensionFilter filter) {
File[] files = directory.listFiles(filter);
return files != null ? Arrays.asList(files) : Collections.<File>emptyList();
}
/** use like listFilesWithExtension(directory, "txt") */
public static List<File> listFilesWithExtension(File directory, String extension) {
return listFilesWithExtension(directory, new ExtensionFilter(extension));
}
/** lists only .txt files */
private static final ExtensionFilter TXT_FILES = new ExtensionFilter("txt");
public static List<File> listTxtFiles(File directory) {
return listFilesWithExtension(directory, TXT_FILES);
}
If you actually want a list / array of Strings you can convert it later via methods like
public static String[] getFileNamesFromFiles(List<File> files) {
String[] result = new String[files.size()];
for (int i = 0; i < files.size(); i++) {
File file = files.get(i);
result[i] = file.getName();
}
return result;
}