在我的APP中,我希望监控名称中包含“下载”的所有sdcard文件夹,无论它们在哪个级别,如果新文件添加到这些文件夹,我想要注意自己。
该文件夹可能位于根路径的子目录中,也可能位于“子”目录中。
从现在起我想到使用“ FileObserver ”,扫描所有特定文件夹并在其上设置观察者。但这是一项巨大的工作。任何人都可以有更好的主意吗?
答案 0 :(得分:1)
您可以使用:
String sdCardState = Environment.getExternalStorageState();
if( !sdCardState.equals(Environment.MEDIA_MOUNTED ) ) {
displayMessage("No SD Card.");
return;
} else {
File root = Environment.getExternalStorageDirectory();
lookForDownloadDirectories(root);
}
// lookForDownloadDirectories() method:
public void lookForDownloadDirectories(File dir) {
if( dir.getName().equalsIgnoreCase("download") ) {
doSomethingWithDownloadDirectory(dir);
}
String[] filesAndDirectories = dir.list();
for( String fileOrDirectory : filesAndDirectories) {
File f = new File(dir.getAbsolutePath() + "/" + fileOrDirectory);
if( f.isDirectory() ) {
lookForDownloadDirectories(f);
}
}
}
这是递归方法,如您所知,耗费时间和资源......
答案 1 :(得分:1)
您可以从org.apache.commons.io库扩展DirectoryWalker类。