在我的APP中,我想监视所有名称包含“下载”的sdcard文件夹,无论它们在哪个级别,如果新文件添加到这些文件夹中,我想注意自己。
该文件夹可能位于根路径的子目录中,也可能位于“子”目录中。
从现在开始,我想使用“ FileObserver ”,扫描所有特定文件夹并在它们上设置观察者。但这是一项巨大的工作。谁能有更好的主意?
在我的APP中,我想监视所有名称包含“下载”的sdcard文件夹,无论它们在哪个级别,如果新文件添加到这些文件夹中,我想注意自己。
该文件夹可能位于根路径的子目录中,也可能位于“子”目录中。
从现在开始,我想使用“ FileObserver ”,扫描所有特定文件夹并在它们上设置观察者。但这是一项巨大的工作。谁能有更好的主意?
你可以使用这个:
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);
}
}
}
这是递归方法,如您所知,它耗费时间和资源......
您可以从org.apache.commons.io库扩展 DirectoryWalker 类。