在我正在为Android开发的应用程序中,我让用户使用扩展名“.rbc”创建特定于我的应用程序的文件。到目前为止,我已经成功地创建,写入和读取这些文件。
现在我正在尝试计算存在的这些文件的数量。我对Java并不是特别熟悉,我只是开始为Android编程,所以我觉得有点迷失。到目前为止,我所做的所有尝试都无法找到带有我的扩展名的任何文件。
所以我基本上有两个问题需要回答,以便我能解决这个问题:
Android存储应用程序创建文件的默认目录在哪里?
你有什么例子可以告诉我在Android上计算具有特定扩展名的文件吗?
非常感谢你的时间。
答案 0 :(得分: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;
}
}
如果您有某种目录结构,则需要递归搜索,然后在整个目录结构中必须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;
}
}
答案 1 :(得分:2)
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”作为扩展名的总文件数。虽然这可能不是最好/最有效的方法,但它仍然有效。
答案 2 :(得分:0)
对于计数文件,您可以尝试以下代码:
# 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;
# }
您可以使用fileFiles()方法的fileFilter参数返回扩展名为.rbc的文件。
编辑:对不起,错过了一个问题。文件将放在您的应用程序包中 数据/数据..您可以使用DDMS模式在Eclipse的文件资源管理器中查看它们。答案 3 :(得分:0)
这是一个 Java 8+ 示例:
var total=Arrays.asList(new File(pathToDirectory).list())
.stream()
.filter(x -> x.contains(".rbc"))
.collect(Collectors.counting());
或
var fileNames = Arrays.asList(tempDir.list())
.stream()
.filter(x -> x.contains(".rbc"))
.collect(Collectors.toList());
var total=fileNames.size();