-1

目前我有如下代码:

    public boolean accept(File dir, String filename) {
        ...
        return filename.contains(".png") || filename.contains(".jpg") || file.isDirectory();

(可以在那里找到完整的代码 - https://stackoverflow.com/a/18523047/604388

所以,.png现在.jpg是硬编码的。我想将其作为函数参数并允许传递多个扩展,而不仅仅是一个。我怎么能做到?

我想我可以将扩展列表作为数组传递,但我怎么能filename.contains()对所有数组元素执行所有这些检查()?

4

5 回答 5

2

我能想到的最简单的方法是遍历扩展数组:

boolean res = false;
for (String ext: extensions) {
    if (filename.endsWith(ext)) {
        res = true;
    }
}
于 2013-10-12T09:09:14.277 回答
1

我担心这里没有内置答案,所以迭代将是一个很好的旧解决方案:

boolean result = false;
for (String extension : extensions) {
    if (filename.contains(extension)) {
        result = true;
        break;
    }
}
return result || file.isDirectory();

extensions可能是一个String[]或一个Collection<String>

注意:更好的是,使用 endsWith() 而不是 contains() 进行扩展。但是我使用了与OP相同的条件...

于 2013-10-12T09:10:37.370 回答
1

您应该考虑使用 anenum来避免硬编码。-

public enum Extension {
    PNG     (".png"),
    JPG     (".jpg");

    private String suffix;

    Extension(String suffix) {
        this.suffix = suffix;
    }

    public String getSuffix() {
        return suffix;
    }
}

您的代码将如下所示。-

public boolean accept(File dir, String filename, Extension... extensions) {
    boolean res = file.isDirectory();

    if (!res) {
        for (int i = 0; i < extensions.length; i ++) {
            res = res || filename.contains(extensions[i].getSuffix());
        }
    }

    return res;
}
于 2013-10-12T09:10:47.880 回答
0

您可以使用以下代码片段,它应该足以满足您的需求:

private boolean loadFileList(String directory, String...extensions){
    for (String extension : extensions){
        if (filename.contains(extension))
            return true;
    }
    return false;
}

PS我不确定是什么filename类型,但如果返回,boolean那么上面的例子应该适合

于 2013-10-12T09:10:05.723 回答
0
import java.io.File;
import java.io.FileFilter;

public class NewClass {
    public static File[] loadFileList(String dir, FileFilter filter){
        return new File(dir).listFiles(filter);
    }

    public static void loadFiles(){
        File files[] = loadFileList("c:\\", new FileFilter() {
            public boolean accept(File pathname) {
                if(pathname.getAbsolutePath().toLowerCase().endsWith(".png")){
                    return true;
                }
                if(pathname.getAbsolutePath().toLowerCase().endsWith(".jpg")){
                    return true;
                }
                return false;
            }
        });
        // here do some DIRTY things with files....
    }
}
于 2013-10-12T09:22:31.997 回答