gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:09:43 24 4
gpt4 key购买 nike

我正在尝试在所有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com