Андроид, как я могу получить список всех файлов в папке?

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

пробовал:

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

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

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

Я хочу получить все mp3-файлы в папке raw, чтобы я мог получить все имена, а затем добавить их в URI для воспроизведения случайного MP3 следующим образом...

String uriStr = "android.resource://"+ "com.example.phone"+ "/" + "raw/dennis";
Uri uri = Uri.parse(uriStr);
singletonMediaPlayer = MediaPlayer.create(c, uri);

когда я поставил " Деннис.mp3 " в папку assets, он появляется, как и ожидалось, однако, используя приведенный выше код, я больше не могу получить доступ к этому MP3, если нет чего-то вроде:

String uriStr = "android.assets://"+ "com.example.phone"+ "/" + "dennis";
Uri uri = Uri.parse(uriStr);

6 ответов


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

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, который вы получите, обратившись к Р. сырыми.whateveryounamedtheresource


этот код будет извлекать все файлы из "Нового 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 карты разрешение на запись в манифесте.xml-файл


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

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

но на самом деле не помогает мне узнать, где существует папка raw.

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


можно использовать AssetManager:

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

final String[] allFilesInPackage = getContext().getResources().getAssets().list("");

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

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


С Context, вы можете назвать что-то вроде этого:

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

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