我有一个目录:
File dir = new File(MY_PATH);我想列出其名称被表示为整数字符串的所有文件,例如"10“、"20”。
我知道我应该用:
dir.list(FilenameFilter filter);如何定义我的FilenameFilter?
P.S. --我的意思是文件名可以是任何整数字符串,例如"10“或"2000000”或"3452345“。只要文件名是整数字符串,就不会限制数字的数量。
发布于 2013-11-12 15:25:43
您应该在接口accept中覆盖FilenameFilter,并确保参数name只有数字字符。您可以通过使用matches来检查这个
String[] list = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.matches("[0-9]+");
}
});发布于 2013-11-12 15:21:30
最好是作为匿名内部类的实例传递给File#list。
例如,仅列出以扩展名.txt结尾的文件
File dir = new File("/home");
String[] list = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".txt");
}
});若要仅列出文件名为2位整数的文件,可以在accept方法中使用以下内容:
return name.matches("\\d{2}");对于一个或多个数字:
return name.matches("\\d+"); 编辑(作为对@crash先知的评论的回应)
传递一组要列出的文件扩展名。
class ExtensionAwareFilenameFilter implements FilenameFilter {
private final Set<String> extensions;
public ExtensionAwareFilenameFilter(String... extensions) {
this.extensions = extensions == null ?
Collections.emptySet() :
Arrays.stream(extensions)
.map(e -> e.toLowerCase()).collect(Collectors.toSet());
}
@Override
public boolean accept(File dir, String name) {
return extensions.isEmpty() ||
extensions.contains(getFileExtension(name));
}
private String getFileExtension(String filename) {
String ext = null;
int i = filename .lastIndexOf('.');
if(i != -1 && i < filename .length()) {
ext = filename.substring(i+1).toLowerCase();
}
return ext;
}
}
@Test
public void filefilter() {
Arrays.stream(new File("D:\\downloads").
list(new ExtensionAwareFilenameFilter("pdf", "txt")))
.forEach(e -> System.out.println(e));
}发布于 2018-06-27 17:44:38
从Java 8开始,您可以简单地使用lambda表达式来指定自定义筛选器:
dir.list((dir1, name) -> name.equals("foo"));在上面的例子中,只有名为"foo“的文件才能通过。当然要用你自己的逻辑。
https://stackoverflow.com/questions/19932962
复制相似问题