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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5058934/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 09:13:29  来源:igfitidea点击:

How do I count the number of files with a specific extension on Android?

javaandroidfile-iofilefilesystems

提问by Rob S.

In the app I'm developing for Android I'm letting users create files specific to my application with the extension ".rbc". So far I have been successful in creating, writing to, and reading from these files.

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

Right now I am trying to count the number of these files that exists. I'm not particularly familiar with Java and I'm just beginning programming for Android so I feel a bit lost. All of my attempts so far at doing this have not been able to locate any files with my extension.

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

So I basically have two questions I need answered so that I can figure this out:

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

Where is the default directory where Android stores files created by an application?

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

Do you have any examples do you can give me of counting files with a specific extension on Android?

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

Thank you very much in advance for your time.

非常感谢您抽出宝贵时间。

回答by Tiago

Some tests showed me that the default directory where Android stores files created by an application using Context.getFilesDir()is /data/data/<your_package_name>/files

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

To count the files in any given directory you use File.listFiles(FileFilter)over the root dir. Your FileFilter should then be something like this (to filter for ".rbc" 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;
    }

}

If you have some kind of directory structure you need to recursively search then you will have to File.listFiles(FileFilter)over the entire directory structure. And it should be something like:

如果您有某种目录结构需要递归搜索,那么您将不得不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;
}

And where DirFilterwould implements FileFilterthis way:

哪里DirFilter会以FileFilter这种方式实现:

public static class DirFilter implements FileFilter {

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

        return false;
    }

}

回答by Hakan Ozbay

Android usually stores files created by an application in data/data/package_name_of_launching_Activity and there you'll find a few folders where files can be stored. You can get a cache directory within that path by calling getCacheDir().

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

A quick strategy for counting specific extensions could be as follows:

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

If you have a folder, say File folder = new File(folderPath)where folderPath is the absolute path to a folder. You could do the following:

如果您有一个文件夹,请说明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++;
     }
  }

This can give you a count of the total files with ".rbc" as the extension. Although this may not be the best/efficient way of doing it, it still works.

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

回答by evilone

For counting files you can try this code:

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

# 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;  
#   }  

You can use fileFilter parameter for listFiles() method to return files with .rbc extension.

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

EDIT: Sorry, missed one question. Files will be placed in your application package which will be there in data/data.. You can view them in File Explorer in Eclipse with DDMS mode.

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