android — Как перечислить файлы в каталоге Android?" />

Как перечислить файлы в каталоге Android?

Вот мой код:

String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";

        AssetManager mgr = getAssets();

        try {

            String list[] = mgr.list(path);
            Log.e("FILES", String.valueOf(list.length));

            if (list != null)
                for (int i=0; i<list.length; ++i)
                    {
                        Log.e("FILE:", path +"/"+ list[i]);
                    }

        } catch (IOException e) {
            Log.v("List error:", "can't list" + path);
        }

И хотя у меня есть файлы в этом каталоге, он возвращает мне list.length = 0 ... есть идеи?

90 голосов | спросил Roger Travis 27 TueEurope/Moscow2011-12-27T20:41:02+04:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2011 20:41:02 +0400 2011, 20:41:02

9 ответов


0

Попробуйте это:

String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";
Log.d("Files", "Path: " + path);
File directory = new File(path);
File[] files = directory.listFiles();
Log.d("Files", "Size: "+ files.length);
for (int i = 0; i < files.length; i++)
{
    Log.d("Files", "FileName:" + files[i].getName());
}
ответил Yury 27 TueEurope/Moscow2011-12-27T21:24:03+04:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2011 21:24:03 +0400 2011, 21:24:03
0

Я только что обнаружил, что

new File("/sdcard/").listFiles() возвращает ноль, если у вас нет:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

установите в своем файле AndroidManifest.xml.

ответил Dan Brough 20 PM00000050000000931 2014, 17:32:09
0

В дополнение ко всем ответам выше:

Если вы используете Android 6.0+ (уровень API 23+), вам нужно явно запросить разрешение на доступ к внешнему хранилищу. Просто имея

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

в вашем манифесте будет недостаточно. Вы также активно запрашиваете разрешение в своей деятельности:

//check for permission
if(ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED){
    //ask for permission
    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_PERMISSION_CODE);
}

Я рекомендую прочитать это: http://developer.android.com/training/permissions/requesting.html # завивка-запрос

ответил gabriel schulze 5 MarpmSat, 05 Mar 2016 14:38:42 +03002016-03-05T14:38:42+03:0002 2016, 14:38:42
0

Ну, AssetManager перечисляет файлы в assets папка, которая находится внутри вашего файла APK. Так что вы пытаетесь перечислить в своем примере выше это [apk] /assets /sdcard /Pictures.

Если вы поместили несколько изображений в папку assets внутри своего приложения, и они были в Pictures, вы должны сделать mgr.list("/Pictures/").

С другой стороны, если у вас есть файлы на SD-карте, которые находятся за пределами вашего файла APK, в папке Pictures, то вы бы использовали File следующим образом:

File file = new File(Environment.getExternalStorageDirectory(), "Pictures");
File[] pictures = file.listFiles();
...
for (...)
{
log.e("FILE:", pictures[i].getAbsolutePath());
}

И соответствующие ссылки из документов:
Файл
Менеджер активов

ответил Reed 27 TueEurope/Moscow2011-12-27T21:29:21+04:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2011 21:29:21 +0400 2011, 21:29:21
0

Ваш path не находится в папке ресурсов. Либо вы перечисляете файлы в папке ресурсов с помощью AssetManager.list(), либо вы перечисляете файлы на вашей SD-карте с помощью File.list()

ответил Alexander Kulyakhtin 27 TueEurope/Moscow2011-12-27T21:25:42+04:00Europe/Moscow12bEurope/MoscowTue, 27 Dec 2011 21:25:42 +0400 2011, 21:25:42
0
String[] listOfFiles = getActivity().getFilesDir().list();

или

String[] listOfFiles = Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS).list();
ответил rdkit 11 PM00000020000002031 2015, 14:26:20
0

Попробуйте это:

public class GetAllFilesInDirectory {

public static void main(String[] args) throws IOException {

    File dir = new File("dir");

    System.out.println("Getting all files in " + dir.getCanonicalPath() + " including those in subdirectories");
    List<File> files = (List<File>) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    for (File file : files) {
        System.out.println("file: " + file.getCanonicalPath());
    }

}

}
ответил Iman Marashi 24 +03002015-10-24T12:30:42+03:00312015bEurope/MoscowSat, 24 Oct 2015 12:30:42 +0300 2015, 12:30:42
0

Возможны две вещи:

  • Вы не добавляете READ_EXTERNAL_STORAGE к своему AndroidManifest.xml
  • Вы ориентируетесь на Android 23 и не запрашиваете такое разрешение у пользователя. Перейдите на Android 22 или попросите у пользователя это разрешение.
ответил Roc Boronat 22 FebruaryEurope/MoscowbMon, 22 Feb 2016 14:44:45 +0300000000pmMon, 22 Feb 2016 14:44:45 +030016 2016, 14:44:45
0

Попробуйте это

 String appDirectoryName = getResources().getString(R.string.app_name);
    File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getResources().getString(R.string.app_name));
    directory.mkdirs();
    File[] fList = directory.listFiles();
    int a = 1;
    for (int x = 0; x < fList.length; x++) {

        //txt.setText("You Have Capture " + String.valueOf(a) + " Photos");
        a++;
    }
    //get all the files from a directory
    for (File file : fList) {
        if (file.isFile()) {
            list.add(new ModelClass(file.getName(), file.getAbsolutePath()));
        }
    }
ответил Mujahid khan 27 22018vEurope/Moscow11bEurope/MoscowTue, 27 Nov 2018 10:05:24 +0300 2018, 10:05:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132