FilenameFilter,搜索文件夹

时间:2012-08-29 08:15:27

标签: java android

我有这个实现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循环中,输出只是所有根目录中的文件,而不是那些将蓝牙作为名称的文件。我在这做错了什么?

4 个答案:

答案 0 :(得分:4)

这是因为你正在检查name是否包含“蓝牙”,而不是fileName是否包含“bluetooth”这个词

return name.contains("bluetooth");应更改为return filename.contains("bluetooth");

但是,按照您尝试实施的方式,将其更改为return filename.contains(name);,以便您实际检查fileName是否包含您指定的name。< / p>

另请注意,“蓝牙”可能与“{蓝牙”或“蓝牙”contains()的评估方式不同。如果您想要不区分大小写的搜索,那么我建议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());
 }
}

答案 1 :(得分:1)

您正在调用属性名称中包含的方法,而是在参数filename中调用它。您还应该从方法中删除文字字符串,如下所示:

filename.contains(name)

这样您就可以使用为其创建的属性,并可以在其他情况下重用该类。这同样适用于searchForBluetoothFolder方法。

答案 2 :(得分:1)

FileFilter folderFilter = new FileFilter() {
    @Override
    public boolean accept(File file) {
        return file.isDirectory() && file.getName().contains("bluetooth");
    }
};

File[] files = f.listFiles(folderFilter);

答案 3 :(得分:1)

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 filename.contains("bluetooth");
 }
}