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");
}
}