我通常更愿意返回 aFile
而不是 a String
。这样您就不必在每次想要使用它时都创建一个新文件,并且您可以根据需要访问例如文件名 ( .getName()
> foo.txt
) 或整个路径 ( getPath()
> /dir/foo.txt
)。
File
已经有一个内置的过滤器功能,可以作为String
( FileNameFilter
)处理文件,也可以处理文件File
本身 ( FileFilter
)。如上所述,我更喜欢在File
.
实现 aFileFilter
非常简单。
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);
}
}
现在添加一些使用这种过滤器的方法,你就完成了。
// 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);
}
如果您确实想要一个字符串列表/数组,您可以稍后通过以下方法进行转换
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;
}