Comment lister les fichiers dans un répertoire Android?

Voici mon code jusqu’à présent:

Ssortingng path = Environment.getExternalStorageDirectory().toSsortingng()+"/Pictures"; AssetManager mgr = getAssets(); try { Ssortingng list[] = mgr.list(path); Log.e("FILES", Ssortingng.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); } 

Pourtant, alors que j’ai des fichiers dans ce répertoire, il me renvoie list.length = 0 … des idées?

Essaye ça:

 Ssortingng path = Environment.getExternalStorageDirectory().toSsortingng()+"/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()); } 

Je viens de découvrir que:

new File("/sdcard/").listFiles() renvoie null si vous n’avez pas:

définir dans votre fichier AndroidManifest.xml.

En plus de toutes les réponses ci-dessus:

Si vous utilisez Android 6.0+ (API Level 23+), vous devez demander explicitement l’autorisation d’accéder au stockage externe. Simplement avoir

  

dans votre manifeste ne suffira pas. Vous avez également demandé activement l’autorisation dans votre activité:

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

Je recommande de lire ceci: http://developer.android.com/training/permissions/requesting.html#perm-request

Eh bien, AssetManager répertorie les fichiers dans le dossier de assets qui se trouve dans votre fichier APK. Donc, ce que vous essayez d’énumérer dans votre exemple ci-dessus est [apk] / assets / sdcard / Pictures.

Si vous placez des images dans le dossier assets intérieur de votre application, et qu’elles se trouvaient dans le répertoire Pictures , vous feriez mgr.list("/Pictures/") .

D’un autre côté, si vous avez des fichiers sur la carte SD qui sont en dehors de votre fichier APK, dans le dossier Pictures , vous utiliseriez alors File as:

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

Et des liens pertinents de la documentation:
Fichier
Gestionnaire d’actifs

Votre path ne se trouve pas dans le dossier assets. Soit vous énumérez les fichiers dans le dossier assets au moyen de AssetManager.list() ou vous énumérez les fichiers sur votre carte SD au moyen de File.list()

 Ssortingng[] listOfFiles = getActivity().getFilesDir().list(); 

ou

 Ssortingng[] listOfFiles = Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS).list(); 

Essaye ça:

 public class GetAllFilesInDirectory { public static void main(Ssortingng[] args) throws IOException { File dir = new File("dir"); System.out.println("Getting all files in " + dir.getCanonicalPath() + " including those in subdirectories"); List files = (List) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); for (File file : files) { System.out.println("file: " + file.getCanonicalPath()); } } } 

Il y a deux choses qui pourraient se passer:

  • Vous READ_EXTERNAL_STORAGE autorisation READ_EXTERNAL_STORAGE à votre AndroidManifest.xml
  • Vous ciblez Android 23 et vous ne demandez pas cette autorisation à l’utilisateur. Descendez à Android 22 ou demandez à l’utilisateur l’autorisation.