到目前为止,我试图从可移动sdcard获取所有文件路径和名称,但我正在获取sdcard的路径,例如“ / storage / BBF8-A8D3”。 现在,我代表这个路径更深入地查找文件,如果有子目录,请转到它们并在这些子目录中查找文件。
这给了我sdcard的路径
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static List<String> getSdCardPaths(final Context context, final boolean includePrimaryExternalStorage) {
final File[] externalCacheDirs = ContextCompat.getExternalCacheDirs(context);
if (externalCacheDirs == null || externalCacheDirs.length == 0)
return null;
if (externalCacheDirs.length == 1) {
if (externalCacheDirs[0] == null)
return null;
final String storageState = EnvironmentCompat.getStorageState(externalCacheDirs[0]);
if (!Environment.MEDIA_MOUNTED.equals(storageState))
return null;
if (!includePrimaryExternalStorage && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && Environment.isExternalStorageEmulated())
return null;
}
final List<String> result = new ArrayList<>();
if (includePrimaryExternalStorage || externalCacheDirs.length == 1)
result.add(getRootOfInnerSdCardFolder(externalCacheDirs[0]));
for (int i = 1; i < externalCacheDirs.length; ++i) {
final File file = externalCacheDirs[i];
if (file == null)
continue;
final String storageState = EnvironmentCompat.getStorageState(file);
if (Environment.MEDIA_MOUNTED.equals(storageState))
result.add(getRootOfInnerSdCardFolder(externalCacheDirs[i]));
}
if (result.isEmpty())
return null;
return result;
}
/**
* Given any file/folder inside an sd card, this will return the path of the sd card
*/
private static String getRootOfInnerSdCardFolder(File file) {
if (file == null)
return null;
final long totalSpace = file.getTotalSpace();
while (true) {
final File parentFile = file.getParentFile();
if (parentFile == null || parentFile.getTotalSpace() != totalSpace)
return file.getAbsolutePath();
file = parentFile;
}
}
然后用于递归查找文件但被卡住
public void recursiveFunction(File dirPath) {
File f = new File(String.valueOf(dirPath));
filesarray = f.listFiles();
try {
for (int i = 0; i < filesarray.length; i++) {
if (filesarray[i].isFile()) {
int mid = filesarray[i].getName().lastIndexOf(".");
// String ext=filesarray[i].getName().substring(mid+1,filesarray[i].getName().length());
FilesNamez.add(filesarray[i].getName());
FilesPathz.add(filesarray[i].getAbsolutePath());
} else
recursiveFunction(filesarray[i].getAbsoluteFile());
}
}
catch (Exception ex){}
}