Android, как я могу получить список всех файлов в папке?
Мне нужно имя (String) всех файлов в res/raw/
Я пробовал:
File f = new File("/");
String[] someFiles = f.list();
Похоже, что корневой каталог является корнем эмулятора android... а не корневым каталогом моих компьютеров. Это имеет смысл, но на самом деле не помогает мне узнать, где находится необработанная папка.
Спасибо!
Обновление: спасибо за все замечательные ответы. Похоже, что некоторые из них работают, но только получают меня на полпути. Возможно, более подробное описание поможет...
Я хочу получить все mp3 файлы в исходной папке, чтобы я мог получить все имена, а затем добавить их в URI, чтобы воспроизвести случайный MP3 следующим образом.
String uriStr = "android.resource://"+ "com.example.phone"+ "/" + "raw/dennis";
Uri uri = Uri.parse(uriStr);
singletonMediaPlayer = MediaPlayer.create(c, uri);
Когда я помещаю "dennis.mp3" в папку с ресурсами, он отображается как ожидалось... однако, используя приведенный выше код, я больше не могу получить доступ к этому MP3 файлу... если только что-то не пойдет по линии из:
String uriStr = "android.assets://"+ "com.example.phone"+ "/" + "dennis";
Uri uri = Uri.parse(uriStr);
Еще раз спасибо за полезные ответы.
Ответы
Ответ 1
Чтобы отобразить все имена ваших исходных активов, которые в основном являются именами файлов с отключенными расширениями, вы можете сделать это:
public void listRaw(){
Field[] fields=R.raw.class.getFields();
for(int count=0; count < fields.length; count++){
Log.i("Raw Asset: ", fields[count].getName());
}
}
Так как фактические файлы не просто сидят в файловой системе, когда они находятся на телефоне, имя не имеет значения, и вам нужно будет обратиться к ним целым числом, назначенным этому имени ресурса. В приведенном выше примере вы можете получить это целое число:
int resourceID=fields[count].getInt(fields[count]);
Это тот же int, который вы получили бы, обратившись к R.raw.whateveryounamedtheresource
Ответ 2
Этот код будет извлекать все файлы из "New Foder" sdCard.
File sdCardRoot = Environment.getExternalStorageDirectory();
File yourDir = new File(sdCardRoot, "New Folder");
for (File f : yourDir.listFiles()) {
if (f.isFile())
{
String name = f.getName();
Log.i("file names", name);
}
}
а также обязательно добавьте разрешение на запись в android sd card в файл manifest.xml
Ответ 3
Мне нужно имя (String) всех файлов в res/raw/
На устройстве нет файлов res/raw/
. Это ресурсы. Нет никакого хорошего способа перебора ресурсов, кроме как с помощью отражения для итерации по статическим членам данных класса R.raw
для получения различных имен и значений идентификаторов.
но на самом деле не помогает мне узнать, где находится необработанная папка.
Как папка, она существует только на вашей машине разработки. Это не папка на устройстве.
Ответ 4
Вы можете использовать AssetManager:
Насколько я помню, у вас будет список (просто попробуйте разные пути):
final String[] allFilesInPackage = getContext().getResources().getAssets().list("");
Ответ 5
Посмотрите http://developer.android.com/reference/android/content/res/Resources.html
Обычно вы можете получить экземпляр ресурсов, связанный с вашим приложением, с помощью функции getResources().
Класс ресурсов обеспечивает доступ к http://developer.android.com/reference/android/content/res/AssetManager.html (см. метод getAssets()).
И, наконец, получите доступ к вашим упакованным файлам (apk) с помощью метода AssetManager.list().
Наслаждайтесь!
Ответ 6
Из Context
вы можете вызвать что-то вроде этого:
getResources().getAssets().list("thePath");
ссылка на документацию