我想创建一个只显示包含图像/ mp3 /音频的文件夹的功能

时间:2016-02-25 23:15:12

标签: android

我想要的是仅显示包含图像或视频或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;
    }
}
}

1 个答案:

答案 0 :(得分:0)

在接受函数中,您有代码return (((sel.isFile() || sel.isDirectory()) && !sel.isHidden()));

如果sel.isDirectory不是返回true,则需要搜索该目录中的所有文件并在其中查找媒体文件,并且只有在找到一个文件时才返回true。如果您在文件系统中使用符号链接,这会将您的算法转换为递归算法 - 您必须要注意循环。它也可能导致性能问题。