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

Java 如何计算Android上具有特定扩展名的文件数?,java,android,file-io,file,filesystems,Java,Android,File Io,File,Filesystems,在我为Android开发的应用程序中,我允许用户创建扩展名为“.rbc”的特定于我的应用程序的文件。到目前为止,我已经成功地创建、写入和读取了这些文件 现在我正试图计算这些文件的数量。我对Java不是特别熟悉,而且我刚刚开始为Android编程,所以我觉得有点迷茫。到目前为止,我所有的尝试都无法找到任何扩展名为我的文件 所以我基本上有两个问题需要回答,这样我才能弄明白: Android存储应用程序创建的文件的默认目录在哪里 你能给我举一些在Android上计算特定扩展名的文件的例子吗 提前非常感

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

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

所以我基本上有两个问题需要回答,这样我才能弄明白:

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

你能给我举一些在Android上计算特定扩展名的文件的例子吗


提前非常感谢您抽出时间。

要计算文件数量,您可以尝试以下代码:

# 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;  
#   }  
可以使用fileFilter参数for listFiles()方法返回扩展名为.rbc的文件

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

Android通常将应用程序创建的文件存储在“启动”活动的“数据/数据/包名称”中,在那里您可以找到几个文件夹,在这些文件夹中可以存储文件。您可以通过调用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++;
     }
  }
String[]fileNames=folder.list();
int-total=0;
对于(int i=0;i

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

一些测试表明,Android存储应用程序使用
Context.getFilesDir()
创建的文件的默认目录是
/data/data//files

要计算任何给定目录中的文件,请在根目录上使用
File.listFiles(FileFilter)
。然后,您的文件过滤器应该如下所示(用于过滤“.rbc”文件):

如果您有某种目录结构需要递归搜索,那么您必须对整个目录结构进行
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;
}

listFiles()是什么类的方法?必须指出,
Context.getCacheDir()
提供了
/data/data//cache
的位置,而
Context.getFilesDir()
指向
/data/data//files
。前者定期刷新,因此在缓存目录中存储文件时请注意。
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;
}
public static class DirFilter implements FileFilter {

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

        return false;
    }

}