Как подсчитать количество файлов с определенным расширением на Android? - PullRequest
3 голосов
/ 20 февраля 2011

В приложении, которое я разрабатываю для Android, я позволяю пользователям создавать файлы, специфичные для моего приложения, с расширением ".rbc".До сих пор я успешно создавал, записывал и читал из этих файлов.

Сейчас я пытаюсь подсчитать количество этих файлов, которые существуют.Я не особенно знаком с Java, и я только начинаю программировать для Android, поэтому чувствую себя немного растерянным.Все мои попытки сделать это не смогли найти ни одного файла с моим расширением.

Поэтому у меня есть два вопроса, на которые мне нужно ответить, чтобы я мог это выяснить:

Где находится каталог по умолчанию, в котором Android хранит файлы, созданные приложением?

Есть ли у вас какие-либо примеры подсчета файлов с определенным расширением на Android?

Большое спасибозаранее за ваше время.

Ответы [ 3 ]

8 голосов
/ 20 февраля 2011

Некоторые тесты показали, что каталог по умолчанию, в котором 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;
    }

}

Если у вас есть какая-то структура каталогов, которую вам нужно рекурсивно искать, вам придется 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;
}

И где DirFilter будет реализовывать FileFilter таким образом:

public static class DirFilter implements FileFilter {

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

        return false;
    }

}
2 голосов
/ 20 февраля 2011

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".Хотя, возможно, это не самый лучший / эффективный способ сделать это, он все же работает.

0 голосов
/ 20 февраля 2011

Для подсчета файлов вы можете попробовать этот код:

# 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 для метода listFiles (), чтобы возвращать файлы с расширением .rbc.

EDIT: извините, пропустилодин вопрос.Файлы будут помещены в ваш пакет приложений, который будет там в данных / данных. Вы можете просматривать их в File Explorer в Eclipse с режимом DDMS.

...