如何从可移动sd卡路径获取所有文件路径和名称?

时间:2019-03-09 05:57:09

标签: android file filepath

到目前为止,我试图从可移动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){}
}

0 个答案:

没有答案