如何获取android目录设备中的文件?

How to get file in directory device in android?

我创建了一个简单的应用程序媒体播放器,我想获取设备 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 的解决方案

您需要递归循环所有目录以找到所有.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 {
        }
    }

希望对您有所帮助。

正如 Vigor 提到的,您需要递归地循环访问外部存储的子目录。现在您只是检查外部存储根目录中的 files/directories。这样的事情应该有效:

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);
  }
}