0

我编写了一个应用程序来显示 android 的整个文件系统的平面列表。整个文件系统的平面列表是通过递归方法构造的(如下)。

现在问题来了:即使代码没有更改,每次获得的路径总数有时也会不同(例如,结果在 +- 100 条路径左右变化)。请注意,仅当mLevelLimit设置为 > 0 时(即执行递归时)才会出现此问题。

private int mLevelLimit = 3; // the depth of the path to display
private int mLevelCount = 0;

private FileFilter mDirectoriesFilter = new FileFilter() {
    public boolean accept(File file) {
        return file.isDirectory();
    }
};

/**
 * Get entire system folder list.
 * 
 * @param parentDirectory
 *            the root directory
 */
private List<File> getFoldersList(File parentDirectory) {
    ArrayList<File> folderList = new ArrayList<File>();
    File[] files = parentDirectory.listFiles(mDirectoriesFilter);

    if (files != null) {
        for (File file : files) {
            folderList.add(file);

            if (mLevelCount < mLevelLimit) {
                mLevelCount++;
                folderList.addAll(getFoldersList(file));
                mLevelCount--;
            }
        }
    }

    return folderList;
}

我尝试搜索 File.listFiles() API 是否存在任何已知问题,但找不到任何结果。所以我想知道我的递归方法是否有问题。任何帮助将不胜感激。谢谢!

4

2 回答 2

0

根据File.listFiles()上的文档,

无法保证结果数组中的名称字符串会以任何特定顺序出现;特别是,它们不能保证按字母顺序出现。

因此,您的递归每次运行时可能会采用不同的路径。为了达到预期的效果,您可能需要对listFiles()迭代之前获得的数组进行排序。

于 2013-05-08T07:22:49.923 回答
0

我找到了 File.listFiles() 方法返回的长度/大小不一致的根本原因。这种变化是由于系统文件夹在运行时被修改造成的(例如,有一次我可能有 /proc/31683 文件夹,但另一个时候这个文件夹已被系统删除)。换句话说,我的原始代码运行良好。谢谢。

于 2013-05-09T01:12:24.890 回答