我在这里想要的是只显示包含图像或视频或mp3的文件夹和子文件夹。
for (int i = 0; i < fileList.size(); i++) {
TextView textView = new TextView(this);
textView.setText(fileList.get(i).getName());
textView.setPadding(5, 5, 5, 5);
System.out.println(fileList.get(i).getName());
if (fileList.get(i).isDirectory()) {
textView.setTextColor(Color.parseColor("#000000"));
}
view.addView(textView);
}
}
public ArrayList<File> getfile(File dir) {
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
File sel = new File(dir, filename);
// Filters based on whether the file is hidden or not
return (((sel.isFile() || sel.isDirectory()) && !sel.isHidden()));
//...
}
};
File listFile[] = dir.listFiles(new ImageFileFilter());
if (listFile != null && listFile.length > 0) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
fileList.add(listFile[i]);
getfile(listFile[i]);
} else {
if (listFile[i].getName().endsWith(".png") || listFile[i].getName().endsWith(".JPG") || listFile[i].getName().endsWith(".jpeg") || listFile[i].getName().endsWith(".gif") || listFile[i].getName().endsWith(".mp3")) {
//fileList.add(listFile[i].getParentFile());
fileList.add(listFile[i]);
}
}
}
}
return fileList;
}
我尝试了以下功能,但它仍然显示不包含图像或视频或mp3的文件夹
private boolean isImageFile(String filePath) {
if (filePath.endsWith("JPG") || filePath.endsWith("PNG") || filePath.endsWith(".mp3"))
// Add other formats as desired
{
return true;
}
return false;
}
private class ImageFileFilter implements FileFilter {
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
} else if (isImageFile(file.getAbsolutePath())) {
return true;
}
return false;
}
}
}
在接受函数中,你有代码return (((sel.isFile() || sel.isDirectory()) && !sel.isHidden()));
如果 sel.isDirectory 则返回 true,而不是返回 true,您需要搜索该目录中的所有文件并在其中查找媒体文件,并且仅在找到媒体文件时才返回 true。 这会将您的算法变成递归算法,如果您在文件系统中使用符号链接,可能会出现问题 - 您必须提防循环。 它还可能导致性能问题。