我想要的是仅显示包含图像或视频或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;
}
}
}
答案 0 :(得分:0)
在接受函数中,您有代码return (((sel.isFile() || sel.isDirectory()) && !sel.isHidden()));
如果sel.isDirectory不是返回true,则需要搜索该目录中的所有文件并在其中查找媒体文件,并且只有在找到一个文件时才返回true。如果您在文件系统中使用符号链接,这会将您的算法转换为递归算法 - 您必须要注意循环。它也可能导致性能问题。