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

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

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

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

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

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

非常感谢你的时间。

一些测试向我展示了Android存储由应用程序使用Context.getFilesDir()创建的文件的默认目录是/data/data//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; } } 

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

 public static List listFiles(File rootDir, FileFilter filter, boolean recursive) { List result = new ArrayList(); 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; } 

DirFilter将以这种方式实现FileFilter

 public static class DirFilter implements FileFilter { @Override public boolean accept(File pathname) { if( pathname.isDirectory() ) return true; return false; } } 

Android通常将应用程序创建的文件存储在data / data / package_name_of_launching_Activity中,您可以在其中找到一些可以存储文件的文件夹。 您可以通过调用getCacheDir()在该路径中获取缓存目录。

计算特定扩展的快速策略可以如下:

如果您有一个文件夹,请说File folder = new File(folderPath) ,其中folderPath是文件夹的绝对路径。 您可以执行以下操作:

 String[] fileNames = folder.list(); int total = 0; for (int i = 0; i< filenames.length; i++) { if (filenames[i].contains(".rbc")) { total++; } } 

这可以为您提供以“.rbc”作为扩展名的总文件数。 虽然这可能不是最好/最有效的方法,但它仍然有效。

对于计数文件,您可以尝试以下代码:

 # public static List getFiles(File aStartingDir) # { # List result = new ArrayList(); # # File[] filesAndDirs = aStartingDir.listFiles(); # List filesDirs = Arrays.asList(filesAndDirs); # Iterator filesIter = filesDirs.iterator(); # File file = null; # while ( filesIter.hasNext() ) { # file = (File)filesIter.next(); # result.add(file); //always add, even if directory # if (!file.isFile()) { # //must be a directory # //recursive call! # List deeperList = getFileListing(file); # result.addAll(deeperList); # } # # } # Collections.sort(result); # return result; # } 

您可以使用listFiles()方法的fileFilter参数来返回扩展名为.rbc的文件。

编辑:对不起,错过了一个问题。 文件将放在您的应用程序包中,该应用程序包将存在于数据/数据中。您可以使用DDMS模式在Eclipse的文件资源管理器中查看它们。