Android, как я могу получить список всех файлов в папке? - PullRequest
24 голосов
/ 30 июня 2011

Мне нужно имя (строка) всех файлов в res / raw /

Я пытался:

File f = new File("/"); 
String[] someFiles = f.list();

Похоже, корневой каталог - это корень эмулятора Android ... а не корневой каталог моего компьютера. Это имеет достаточно смысла, но на самом деле не помогает мне узнать, где находится необработанная папка.

Обновление: спасибо за все великолепные ответы. Похоже, что некоторые из них работают, но только на полпути. Возможно, более подробное описание поможет

Я хочу получить все файлы mp3 в папке raw, чтобы я мог получить все имена, а затем добавить их в 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);

Ответы [ 6 ]

59 голосов
/ 30 июня 2011

Чтобы вывести список всех имен ваших необработанных ресурсов, которые в основном являются именами файлов со снятыми расширениями, вы можете сделать это:

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.whateveryamedtheresource

6 голосов
/ 02 января 2014

Этот код извлечет все файлы из '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);          

        }

     }

, а также обязательно добавит разрешение записи SD-карты Android в ваш файл manifest.xml

3 голосов
/ 30 июня 2011

Мне нужно имя (строка) всех файлов в res / raw /

В устройстве res/raw/ нет файлов на устройстве.Это ресурсы.Нет хорошего способа перебора ресурсов, кроме использования отражения для перебора статических членов класса R.raw для получения различных имен и значений идентификаторов.

, но это не такдействительно помогите мне узнать, где находится необработанная папка.

Как папка, она существует только на вашем компьютере разработчика.Это не папка на устройстве.

1 голос
/ 30 июня 2011

Посмотрите на http://developer.android.com/reference/android/content/res/Resources.html Как правило, вы можете получить экземпляр Resources, связанный с вашим приложением, с помощью getResources ().

Класс ресурсов предоставляет доступ к http://developer.android.com/reference/android/content/res/AssetManager.html (см. Метод getAssets ()). И, наконец, получите доступ к вашим упакованным (apk) файлам с помощью метода AssetManager.list (). Наслаждайтесь!

1 голос
/ 30 июня 2011

Вы можете использовать AssetManager :

Насколько я помню, у вас будет список с (попробуйте разные пути):

final String[] allFilesInPackage = getContext().getResources().getAssets().list("");
0 голосов
/ 30 июня 2011

С Context вы можете позвонить примерно так:

getResources().getAssets().list("thePath");

ссылка на документацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...