首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FilenameFilter,搜索文件夹

FilenameFilter,搜索文件夹
EN

Stack Overflow用户
提问于 2012-08-29 08:15:27
回答 4查看 3.3K关注 0票数 4

我有一个实现FilenameFilter的类

代码语言:javascript
复制
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");
 }
}

我在这个方法中使用这个类:

代码语言:javascript
复制
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只是根目录中所有文件的,而不是那些以蓝牙为名称的文件。我在这里做错什么了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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())进行检查。类似于:

代码语言:javascript
复制
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());
 }
}
票数 4
EN

Stack Overflow用户

发布于 2012-08-29 08:20:35

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

代码语言:javascript
复制
filename.contains(name)

这样,您就可以使用为其创建的属性,并且可以在另一种情况下重用类。searchForBluetoothFolder方法也是如此。

票数 1
EN

Stack Overflow用户

发布于 2012-08-29 08:23:40

代码语言:javascript
复制
FileFilter folderFilter = new FileFilter() {
    @Override
    public boolean accept(File file) {
        return file.isDirectory() && file.getName().contains("bluetooth");
    }
};

File[] files = f.listFiles(folderFilter);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12173521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档