Java FilenameFilter,搜索文件夹

Java FilenameFilter,搜索文件夹,java,android,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(Fi

我有一个实现
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 "";
}
公共字符串SearchForBluetooth文件夹(){
字符串folderNameToSearchFor=“蓝牙”;
文件根=SD卡;
FilenameFilter filter=新过滤器(folderNameToSearchFor);
字符串[]bluetoothFolder=root.list(过滤器);
对于(int i=0;i

在for循环中,输出只是根目录中的所有文件,而不是那些以bluetooth作为名称的文件。我做错了什么

如果要调用属性名称中包含的方法,请改为在参数文件名中调用该方法。您还应该从方法中删除文本字符串,操作如下:

filename.contains(name)

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

这是因为您正在检查
name
是否包含“bluetooth”,而不是
fileName
是否包含“bluetooth”一词

返回名称。包含(“蓝牙”)
应更改为
返回文件名.contains(“蓝牙”)

但是,按照您尝试实现的方式,将其更改为
returnfilename.contains(name)
这样您就可以实际检查您的
文件名
是否包含您指定的
名称

还请记住,“bluetooth”的评估可能与
contains()
的“bluetooth”或“bluetooth”不同。如果您想要不区分大小写的搜索,那么我建议将您的姓名标准化。将
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());
 }
}

@TobiasMoeThorstensen:很高兴能帮忙:)
FileFilter folderFilter = new FileFilter() {
    @Override
    public boolean accept(File file) {
        return file.isDirectory() && file.getName().contains("bluetooth");
    }
};

File[] files = f.listFiles(folderFilter);
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");
 }
}