Подтвердить что ты не робот

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

Еще раз спасибо за полезные ответы.

4b9b3361

Ответ 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(). Наслаждайтесь!