如何获取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);
}
}
我创建了一个简单的应用程序媒体播放器,我想获取设备 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 文件。
您可以创建这样的函数:
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);
}
}