4

我有这个实现的类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

4 回答 4

4

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

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

但是,通过您尝试实现的方式,将其更改为,return filename.contains(name);以便您确实检查您是否fileName包含name您指定的内容。

另请记住,“蓝牙”的评估可能与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());
 }
}
于 2012-08-29T08:22:15.580 回答
1

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

filename.contains(name)

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

于 2012-08-29T08:20:35.663 回答
1
FileFilter folderFilter = new FileFilter() {
    @Override
    public boolean accept(File file) {
        return file.isDirectory() && file.getName().contains("bluetooth");
    }
};

File[] files = f.listFiles(folderFilter);
于 2012-08-29T08:23:40.217 回答
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");
 }
}
于 2012-08-29T08:24:54.223 回答