Пытаясь получить все пути и имена файлов со съемной SD-карты, я получаю путь SD-карты, например "/ 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){}
}