Java 在所有SD卡中搜索文件
我正在尝试搜索所有SD卡中扩展名为“.apk”的文件。我写过这个方法Java 在所有SD卡中搜索文件,java,android,Java,Android,我正在尝试搜索所有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()) {
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());
}
}
}
}
}
}
问题是,如果我将一些apk文件放入SD卡中,数组列表大小为0,则此方法不会检测到任何apk文件。为什么?我的目标是扫描所有sd卡以搜索.apk文件。第一次通过dir作为“/下载”存储ur文件的确切位置。
然后通过整个SD卡根路径
像searchAPK(新文件(“/下载”)
和代码尝试
private void searchAPK(File dir){
File[] files = dir.listFiles();
Log.i("DIR", "Found " + files.length + " in " + dir.getAbsolutePath());
for (File file : files) {
if(file.isFile() && isAPK(file)){
list.add(file);
Log.i("APK found", file.getName());
}else if(file.isDirectory()){
searchAPK(file.getAbsoluteFile());
}
}
}
private boolean isAPK(File file){
boolean is = false;
if(file.getName().endsWith(".apk") || file.getName().endsWith(".APK")){
is = true;
}
return is;
}
File[]files=dir.listFiles()
在您的情况下,文件应该是本地数组使
mFile
成为扫描的本地变量。这是递归工作所必需的。因为mFile
是一个字段,对scan
的每次调用都不会得到自己的mFile
的“副本”
调用scan(“/sdcard”)时会发生以下情况:(我假装参数是filename而不是文件
,只是为了简化这个解释)
if(mFile[i] != null) {
试试这个:
public void scan(File file) {
mFile = file.listFiles();
if(mFile != null) {
for(int i=0;i<mFile.length;i++) {
if(mFile[i].isDirectory()) {
scan(mFile[i]);
} else {
if(mFile[i].getName().endsWith(".apk")) {
lista.add(mFile[i].getName());
}
}
}
}
}
公共作废扫描(文件){
mFile=file.listFiles();
如果(mFile!=null){
对于(int i=0;iMost用户在该位置将不会有.apk文件。您的案例中有吗?我的apk文件在/Download文件夹中。请提供完整路径。mFile=file.listFiles();
。在该语句之后,检查mFile是否为null,如果为null,则返回。if(mFile[i]!=null)
。这将永远不会为空。因此您可以删除它。请在此处调整您的代码。您没有在logcat中提到的异常?已经尝试过并且从不为空。那么您可能没有看到我在几分钟前给出了解决方案?
public void scan(File file) {
mFile = file.listFiles();
if(mFile != null) {
for(int i=0;i<mFile.length;i++) {
if(mFile[i].isDirectory()) {
scan(mFile[i]);
} else {
if(mFile[i].getName().endsWith(".apk")) {
lista.add(mFile[i].getName());
}
}
}
}
}