java - 搜索所有 SD 卡中的文件

标签 java android

我正在尝试在所有 SD 卡中搜索扩展名为“.apk”的文件。我已经写了这个方法。

public void scan(File file) {
    mFile = file.listFiles();

    if(mFile != null) {
        for(int i=0;i<mFile.length;i++) {
            if(mFile[i] != null) {
                if(mFile[i].isDirectory()) {
                    scan(mFile[i]);
                } else {
                    if(mFile[i].getName().endsWith(".apk")) {
                        lista.add(mFile[i].getName());
                    }
                }
            }
        }   
    }

}

我作为参数传递

scan(Environment.getExternalStorageDirectory());

问题是,如果我将一些 apk 文件放入 SD 卡,则数组列表大小为 0,并且此方法无法检测到任何 apk 文件。为什么?我的目标是扫描所有 SD 卡以搜索 .apk 文件。

最佳答案

因为 mFile 是一个字段,所以每次调用 scan 都不会获得自己的 mFile“副本”。

当你调用 scan("/sdcard") 时会发生什么:(我假装参数是文件名而不是 File,只是为了简化这个解释)

  1. 已输入 scan("/sdcard")
  2. scan("/sdcard") 将 mFile 设置为/sdcard 中的文件列表。说 {"/sdcard/folder1", "/sdcard/folder2"}。
  3. scan("/sdcard") 调用 scan("/sdcard/folder1"),因为它是 mFile 中的第一个元素。
  4. scan("/sdcard/folder1") 将 mFile 设置为/sdcard/folder1 中的文件列表。说没有。
  5. scan("/sdcard/folder1") 返回,因为 mFile.length 为 0,k 为 0,并且 0<0 不为 true。
  6. scan("/sdcard") 返回,因为 mFile.length 为 0,k 为 1,并且 1<0 不为 true。

注意它是如何从未到达/sdcard/folder2 的。

要修复您的代码,您需要做的就是将 mFile 设为 scan 内的局部变量。

关于java - 搜索所有 SD 卡中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27440359/

相关文章:

java - java应用程序是否有类似Mockito的框架(不在JUnit/测试环境下)?

Java - 当 radix=2 时,Integer.parseInt() 不返回负数

java - 迭代器不允许使用 reducer

android - 如何在android/ios下用delphi app全程跟踪用户位置

android - 面子书 ://profile/{userid} seems to be not working

java - 尝试模拟静态时出现 NoClassDefFoundError 或 NoSuchMethodError (不兼容的依赖项)

java - 是否可以使用实例化的 pojo 来插入 JDBC 模板?

android - Android 2.1中的ActivityInstrumentationTestCase2有问题吗?

android - 使用 Foundation 5 时在移动设备上渲染错误

android - 使用git时出现资源暂时不可用的错误