Android file 如何在android中从手机内部存储器(Nexus 5)获取所有视频文件

Android file 如何在android中从手机内部存储器(Nexus 5)获取所有视频文件,android-file,Android File,我想从设备的内存中获取所有视频文件 我尝试了以下方法,但没有得到结果 File File[]=Environment.getExternalStorageDirectory().listFiles() File File=Environment.getDataDirectory() File File[]=Environment.getRootDirectory().listFiles() File File=Environment.getExternalStoragePublicDirecto

我想从设备的内存中获取所有视频文件

我尝试了以下方法,但没有得到结果

  • File File[]=Environment.getExternalStorageDirectory().listFiles()
  • File File=Environment.getDataDirectory()
  • File File[]=Environment.getRootDirectory().listFiles()
  • File File=Environment.getExternalStoragePublicDirectory()

  • 我得到了这个问题的解决方案。请查看下面的代码

    import android.os.Environment;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    
    public class ExternalStorage { 
    
        public static final String SD_CARD = "sdCard";
        public static final String EXTERNAL_SD_CARD = "externalSdCard";
    
        /** 
         * @return True if the external storage is available. False otherwise. 
         */ 
        public static boolean isAvailable() { 
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
                return true; 
            } 
            return false; 
        } 
    
        public static String getSdCardPath() {
            return Environment.getExternalStorageDirectory().getPath() + "/";
        } 
    
        /** 
         * @return True if the external storage is writable. False otherwise. 
         */ 
        public static boolean isWritable() { 
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) {
                return true; 
            } 
            return false; 
    
        } 
    
        /** 
         * @return A map of all storage locations available 
         */ 
        public static Map<String, File> getAllStorageLocations() {
            Map<String, File> map = new HashMap<String, File>(10);
    
            List<String> mMounts = new ArrayList<String>(10);
            List<String> mVold = new ArrayList<String>(10);
            mMounts.add("/mnt/sdcard");
            mVold.add("/mnt/sdcard");
    
            try { 
                File mountFile = new File("/proc/mounts");
                if(mountFile.exists()){
                    Scanner scanner = new Scanner(mountFile);
                    while (scanner.hasNext()) {
                        String line = scanner.nextLine();
                        if (line.startsWith("/dev/block/vold/")) {
                            String[] lineElements = line.split(" ");
                            String element = lineElements[1];
    
                            // don't add the default mount path 
                            // it's already in the list. 
                            if (!element.equals("/mnt/sdcard"))
                                mMounts.add(element);
                        } 
                    } 
                } 
            } catch (Exception e) {
                e.printStackTrace();
            } 
    
            try { 
                File voldFile = new File("/system/etc/vold.fstab");
                if(voldFile.exists()){
                    Scanner scanner = new Scanner(voldFile);
                    while (scanner.hasNext()) {
                        String line = scanner.nextLine();
                        if (line.startsWith("dev_mount")) {
                            String[] lineElements = line.split(" ");
                            String element = lineElements[2];
    
                            if (element.contains(":"))
                                element = element.substring(0, element.indexOf(":"));
                            if (!element.equals("/mnt/sdcard"))
                                mVold.add(element);
                        } 
                    } 
                } 
            } catch (Exception e) {
                e.printStackTrace();
            } 
    
    
            for (int i = 0; i < mMounts.size(); i++) {
                String mount = mMounts.get(i);
                if (!mVold.contains(mount))
                    mMounts.remove(i--);
            } 
            mVold.clear();
    
            List<String> mountHash = new ArrayList<String>(10);
    
            for(String mount : mMounts){
                File root = new File(mount);
                if (root.exists() && root.isDirectory() && root.canWrite()) {
                    File[] list = root.listFiles();
                    String hash = "[";
                    if(list!=null){
                        for(File f : list){
                            hash += f.getName().hashCode()+":"+f.length()+", ";
                        } 
                    } 
                    hash += "]";
                    if(!mountHash.contains(hash)){
                        String key = SD_CARD + "_" + map.size();
                        if (map.size() == 0) {
                            key = SD_CARD;
                        } else if (map.size() == 1) {
                            key = EXTERNAL_SD_CARD;
                        } 
                        mountHash.add(hash);
                        map.put(key, root);
                    } 
                } 
            } 
    
            mMounts.clear();
    
            if(map.isEmpty()){
                     map.put(SD_CARD, Environment.getExternalStorageDirectory());
            } 
            return map;
        } 
    } 
    
    导入android.os.Environment;
    导入java.io.File;
    导入java.util.ArrayList;
    导入java.util.HashMap;
    导入java.util.List;
    导入java.util.Map;
    导入java.util.Scanner;
    公共类外部存储{
    公共静态最终字符串SD_CARD=“sdCard”;
    公共静态最终字符串EXTERNAL\u SD\u CARD=“externalSdCard”;
    /** 
    *@如果外部存储器可用,则返回True。否则返回False。
    */ 
    公共静态布尔值isAvailable(){
    String state=Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)| Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
    返回true;
    } 
    返回false;
    } 
    公共静态字符串getSdCardPath(){
    返回Environment.getExternalStorageDirectory().getPath()+“/”;
    } 
    /** 
    *@如果外部存储器可写,则返回True;否则返回False。
    */ 
    公共静态布尔值可写(){
    String state=Environment.getExternalStorageState();
    if(环境、介质、安装等于(状态)){
    返回true;
    } 
    返回false;
    } 
    /** 
    *@返回所有可用存储位置的地图
    */ 
    公共静态映射getAllStorageLocations(){
    Map Map=新的HashMap(10);
    列表mMounts=新的ArrayList(10);
    List mVold=new ArrayList(10);
    mMounts.add(“/mnt/sdcard”);
    mVold.add(“/mnt/sdcard”);
    试试{
    File mountFile=新文件(“/proc/mounts”);
    if(mountFile.exists()){
    扫描仪=新扫描仪(挂载文件);
    while(scanner.hasNext()){
    字符串行=scanner.nextLine();
    if(行.startsWith(“/dev/block/vold/”){
    String[]lineElements=line.split(“”);
    String元素=lineElements[1];
    //不要添加默认装载路径
    //它已经在列表中了。
    如果(!element.equals(“/mnt/sdcard”))
    mMounts.add(元素);
    } 
    } 
    } 
    }捕获(例外e){
    e、 printStackTrace();
    } 
    试试{
    File voldFile=新文件(“/system/etc/vold.fstab”);
    if(voldFile.exists()){
    扫描仪=新扫描仪(voldFile);
    while(scanner.hasNext()){
    字符串行=scanner.nextLine();
    if(line.startsWith(“dev_mount”)){
    String[]lineElements=line.split(“”);
    String元素=lineElements[2];
    if(element.contains(“:”)
    element=element.substring(0,element.indexOf(“:”);
    如果(!element.equals(“/mnt/sdcard”))
    mVold.add(元素);
    } 
    } 
    } 
    }捕获(例外e){
    e、 printStackTrace();
    } 
    对于(int i=0;i
    它工作得很好……此代码从设备的内部和外部存储器中获取所有视频文件。