如何计算Android上具有特定扩展名的文件数量?

Rob*_* S. 3 java filesystems file-io android file

在我正在为Android开发的应用程序中,我让用户使用扩展名".rbc"创建特定于我的应用程序的文件.到目前为止,我已经成功地创建,写入和读取这些文件.

现在我正在尝试计算存在的这些文件的数量.我对Java并不是特别熟悉,我只是开始为Android编程,所以我觉得有点迷失.到目前为止,我所做的所有尝试都无法找到带有我的扩展名的任何文件.

所以我基本上有两个问题我需要回答,以便我能解决这个问题:

Android存储应用程序创建的文件的默认目录在哪里?

你有什么例子可以告诉我在Android上计算具有特定扩展名的文件吗?

非常感谢你的时间.

Tia*_*ago 8

一些测试表明我在那里的Android存储文件的应用程序中使用创建的默认目录Context.getFilesDir()/data/data/<your_package_name>/files

要计算任何给定目录中的文件,请使用File.listFiles(FileFilter)根目录.你的FileFilter应该是这样的(过滤".rbc"文件):

public static class RBCFileFilter implements FileFilter {

    @Override
    public boolean accept(File pathname) {
        String suffix = ".rbc";
        if( pathname.getName().toLowerCase().endsWith(suffix) ) {
            return true;
        }
        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果你有某种目录结构,你需要递归搜索,那么你将不得不File.listFiles(FileFilter)覆盖整个目录结构.它应该是这样的:

public static List<File> listFiles(File rootDir, FileFilter filter, boolean recursive) {
    List<File> result = new ArrayList<File>();
    if( !rootDir.exists() || !rootDir.isDirectory() ) 
        return result;


    //Add all files that comply with the given filter
    File[] files = rootDir.listFiles(filter);
    for( File f : files) {
        if( !result.contains(f) )
            result.add(f);
    }

    //Recurse through all available dirs if we are scanning recursively
    if( recursive ) {
        File[] dirs = rootDir.listFiles(new DirFilter());
        for( File f : dirs ) {
            if( f.canRead() ) {
                result.addAll(listFiles(f, filter, recursive));
            }
        }
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

在哪里DirFilter实现FileFilter这种方式:

public static class DirFilter implements FileFilter {

    @Override
    public boolean accept(File pathname) {
        if( pathname.isDirectory() ) 
            return true;

        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)