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 に関する既知の問題が報告されているかどうかを検索してみましたが、結果が見つかりませんでした。代わりに、再帰的な方法に何か問題があるのではないかと思っています。どんな助けでも大歓迎です。ありがとう!