有没有更好的方法为许多分机做filefilter?

ari*_*iso 10 java string file-io filter

File files[] = rootDir.listFiles(new FileFilter() {
    public boolean accept(File file) {
        if (file.isDirectory())
            return true;

    String name = file.getName().toLowerCase();

    if (name.endsWith(".zip") || name.endsWith(".jar")
     || name.endsWith(".z") || name.endsWith(".gz")
     || name.endsWith(".tar") || name.endsWith(".bz2")
     || name.endsWith(".bz"))
        return true;

    return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

如您所见,代码很脏,"||"

你知道怎么做得更好吗?

Mic*_*ers 17

对于Java 6或更高版本,这是...的完美案例,FileNameExtensionFilter除了它扩展javax.swing.filechooser.FileFilter而不是实现java.io.FileFilter.
但为它编写一个包装器是微不足道的:

File[] files = rootDir.listFiles(new FileFilter() {
    private final FileNameExtensionFilter filter =
        new FileNameExtensionFilter("Compressed files",
            "zip", "jar", "z", "gz", "tar", "bz2", "bz");
    public boolean accept(File file) {
        return filter.accept(file);
    }
});
Run Code Online (Sandbox Code Playgroud)


ala*_*mar 5

为什么不使用正则表达式?

static final Pattern p = Pattern.compile("\\.(zip|jar|z|gz)$");

然后 return p.matcher(name).find();


Geo*_*lly 5

一些伪代码解决方案:

迭代一个数组

suffixes = [".tar", ".zip", ".jpg"]

for suffix in suffixes:
    if name.endsWith(suffix):
        return True
Run Code Online (Sandbox Code Playgroud)

使用一套

suffixes = [".tar", ".zip", ".jpg"]

nameSuffix = name.getSuffix()
if nameSuffix in suffixes:
    return True
Run Code Online (Sandbox Code Playgroud)