我有一个实现FilenameFilter的类
package Logic;
import java.io.File;
import java.io.FilenameFilter;
public class Filter implements FilenameFilter {
String name;
public Filter(String name) {
this.name = name;
}
@Override
public boolean accept(File dir, String filename) {
return name.contains("bluetooth");
}
}我在这个方法中使用这个类:
public String searchForBluetoothFolder() {
String folderNameToSearchFor = "bluetooth";
File root = sdCard;
FilenameFilter filter = new Filter(folderNameToSearchFor);
String[] bluetoothFolder = root.list(filter);
for(int i = 0; i < bluetoothFolder.length; i++) {
Log.i("Bluetooth: ", bluetoothFolder[i]);
}
return "";
}在for-循环中,ouput只是根目录中所有文件的,而不是那些以蓝牙为名称的文件。我在这里做错什么了?
发布于 2012-08-29 08:22:15
这是因为您正在检查name是否包含“蓝牙”,而不是fileName是否包含“蓝牙”一词。
return name.contains("bluetooth");应改为return filename.contains("bluetooth");
但是,通过尝试实现的方式,将其更改为return filename.contains(name);,以便实际检查您的fileName是否包含您指定的name。
还请记住,“蓝牙”在contains()中的评估可能与“蓝牙”或"blueTooth“不同。如果你想要不区分大小写的搜索,那么我建议standardize你的名字。将name设置为小写,并使用filename.toLowerCase().contains(name.toLowerCase())进行检查。类似于:
public class Filter implements FilenameFilter {
String name;
public Filter(String name) {
this.name = name;
}
@Override
public boolean accept(File dir, String filename) {
//If you want to perform a case-insensitive search
return filename.toLowerCase().contains(name.toLowerCase());
}
}发布于 2012-08-29 08:20:35
您正在调用属性名称中的方法包含,而不是在参数文件名中调用它。您还应该从方法中删除文字字符串,如下所示:
filename.contains(name)这样,您就可以使用为其创建的属性,并且可以在另一种情况下重用类。searchForBluetoothFolder方法也是如此。
发布于 2012-08-29 08:23:40
FileFilter folderFilter = new FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory() && file.getName().contains("bluetooth");
}
};
File[] files = f.listFiles(folderFilter);https://stackoverflow.com/questions/12173521
复制相似问题