【问题标题】:How to get file in directory device in android?如何在android的目录设备中获取文件?
【发布时间】:2015-11-19 22:26:25
【问题描述】:

我创建了简单的应用程序媒体播放器,我想在设备 android 中获取所有文件 .mp3。在我的代码下方:

File home = new File(String.valueOf(Environment.getExternalStorageDirectory()));
if (home.listFiles().length > 0) {
    for (File file : home.listFiles()) {
        Log.e("test", file.getPath());
        if (file.getName().endsWith(".mp3")) {
            Log.e("tesnyae", file.getPath());
            HashMap<String, String> song = new HashMap<String, String>();
            song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
            song.put("songPath", file.getPath());

            songsList.add(song);
        }
    }
} else {}

但是当我使用Environment.getExternalStorageDirectory() 无法获取设备中的所有.mp3 时,子文件夹仍然可用,如果我使用特定文件夹无法获取所有文件, 有没有解决方案自动获取android设备中的所有文件.mp3

【问题讨论】:

    标签: android directory device subdirectory


    【解决方案1】:

    您需要递归循环所有目录以查找所有 .mp3 文件。

    你可以像这样创建一个函数:

        public void findAudioInFolder(File folder) {
            if (folder.listFiles().length > 0) {
                for (File file : folder.listFiles()) {
                    Log.e("test", file.getPath());
                    if (file.getName().endsWith(".mp3")) {
                        Log.e("tesnyae", file.getPath());
                        HashMap<String, String> song = new HashMap<String, String>();
                        song.put("songTitle", file.getName().substring(0,(file.getName().length() - 4)));
                        song.put("songPath", file.getPath());
    
                        songsList.add(song);
                    } 
                    else if (file.isDirectory()) {
                        findAudioInFolder(file);
                    }
                }
            } else {
            }
        }
    

    你称它为:

    File home = new   File(String.valueOf(Environment.getExternalStorageDirectory()));
    findAudioInFolder(home);
    

    更新:我意识到您可能有一个名为 xxx.mp3 的文件夹。所以你需要先检查文件是否是目录。修改代码如下:

        public void findAudioInFolder(File folder) {
            if (folder.listFiles().length > 0) {
                for (File file : folder.listFiles()) {
                    Log.e("test", file.getPath());
    
                    if (file.isDirectory()) {
                        findAudioInFolder(file);
                    }
                    else if (file.getName().endsWith(".mp3")) {
                        Log.e("tesnyae", file.getPath());
                        HashMap<String, String> song = new HashMap<String, String>();
                        song.put("songTitle", file.getName().substring(0,(file.getName().length() - 4)));
                        song.put("songPath", file.getPath());
    
                        songsList.add(song);
                    } 
    
                }
            } else {
            }
        }
    

    希望它会有所帮助。

    【讨论】:

    • 循环所有目录?如何创建它?对不起,我是新的安卓
    【解决方案2】:

    正如 Vigor 所提到的,您需要递归地遍历外部存储的子目录。现在你只是检查外部存储根目录中的文件/目录。像这样的东西应该可以工作:

    File home = new File(String.valueOf(Environment.getExternalStorageDirectory()));
    checkForMp3Recursive(home);
    

    然后:

    private void checkForMp3Recursive(File file) {
      if (file.isDirectory()) {
        if (file.listFiles().length > 0) {
          for (File innerFile : file.listFiles()) {
            checkForMp3Recursive(innerFile);
          }
        }
      } else if (file.getName().endsWith(".mp3")) {
        Log.e("tesnyae", file.getPath());
        HashMap<String, String> song = new HashMap<String, String>();
        song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4));
        song.put("songPath", file.getPath());
    
        songList.add(song);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 2017-11-06
      相关资源
      最近更新 更多