目前我的代码如下:
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()
)?
答案 0 :(得分:2)
我能想到的最简单的方法是迭代扩展数组:
boolean res = false;
for (String ext: extensions) {
if (filename.endsWith(ext)) {
res = true;
}
}
答案 1 :(得分: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相同......
答案 2 :(得分:1)
您应该考虑使用enum
来避免硬编码.-
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;
}
答案 3 :(得分:0)
您可以使用下面的代码段,该代码段应该足以满足您的需求:
private boolean loadFileList(String directory, String...extensions){
for (String extension : extensions){
if (filename.contains(extension))
return true;
}
return false;
}
P.S。我不确定filename
类型是什么,但如果返回boolean
则上述示例应该适合
答案 4 :(得分: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....
}
}