Le fichier existe et le répertoire IS, mais listFiles () renvoie null

La documentation de File.listFiles() suggère que null sera UNIQUEMENT renvoyé dans le cas où le fichier qui l’appelle n’est pas un répertoire.

J’ai ce qui suit:

 Ssortingng dir = "/storage/emulated/0"; File f = new File(dir); Log.v("Files",f.exists()+""); Log.v("Files",f.isDirectory()+""); Log.v("Files",f.listFiles()+""); 

Le journal indique:

 true true null 

Pour certaines raisons, listFiles( ) renvoie null même si le File est reconnu en tant que répertoire valide. Je ne suis pas très familier avec le comportement de la hiérarchie de fichiers Android, donc je suppose que le problème est là.

Pour référence, je débogue sur mon Moto X, et les résultats sont les mêmes, que le téléphone soit branché ou non sur mon ordinateur – donc je ne pense pas que cela ait à voir avec le assembly lorsqu’il est branché.

Pour ceux qui ont ce problème, ajoutez ceci à AndroidManifest.xml:

  

Problème résolu: D

EDIT: Si cela ne fonctionne pas, assurez-vous simplement que le chemin est correct

Pour ceux avec ce problème, vous devez donner l’autorisation de lecture, ajoutez ceci à AndroidManifest.xml:

 android:name="android.permission.READ_EXTERNAL_STORAGE" 

et vous devriez également accorder la permission de

Paramètres> Applications> “Votre nom d’application” > Autorisations> Stockage

Pour la version Android > 23 , vous devez donner une autorisation d’exécution par programmation dans la méthode onresume ci-dessous,

 public final Ssortingng[] EXTERNAL_PERMS = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE }; public final int EXTERNAL_REQUEST = 138; requestForPermission(); public boolean requestForPermission() { boolean isPermissionOn = true; final int version = Build.VERSION.SDK_INT; if (version >= 23) { if (!canAccessExternalSd()) { isPermissionOn = false; requestPermissions(EXTERNAL_PERMS, EXTERNAL_REQUEST); } } return isPermissionOn; } public boolean canAccessExternalSd() { return (hasPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)); } private boolean hasPermission(Ssortingng perm) { return (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, perm)); } 

A partir de la documentation de la méthode File ‘listFiles’: Retourne null si ce chemin d’access abstrait ne désigne pas un répertoire ou si une erreur d’E / S se produit.

Donc, peut-être une erreur d’E / S s’est produite. Vérifiez les permissions sur ce répertoire, l’utilisateur qui exécute le programme Java a-t-il l’autorisation de lire ce répertoire? Sinon, il y a votre réponse. Si c’est le cas, alors le répertoire est peut-être vide.

BTW vous ne devriez pas utiliser + “” pour convertir quelque chose en une chaîne, c’est une mauvaise pratique car elle est plus lente que Ssortingng.valueOf. Je voudrais utiliser SsortingngUtils d’Apache pour joindre ce tableau dans une chaîne, mais cela nécessite d’append ce fichier à votre chemin de classe.

Ajoutez simplement l’autorisation dans manifeste uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" et votre problème sera résolu.

Mon problème était que pour une raison quelconque, l’atsortingbut android: sharedUserId = “android.uid.system” n’autorisait pas l’application à lire / sdcard / sur un périphérique spécifique.

Comme je ne devais faire qu’un test rapide, j’ai supprimé l’atsortingbut sharedUserId, testé et ajouté.

Dans le fichier manifeste à la section , ajoutez cette ligne android:name="android.permission.READ_EXTERNAL_STORAGE" . Je pense que cela peut résoudre votre problème.

J’ai eu le même problème en Java mais pas dans Android où je lis le fichier de configuration avec le chemin entre guillemets. J’ai résolu mon problème en supprimant les guillemets

Vous pouvez donc le faire en remplaçant la fonction Ssortingng ou lui donner des guillemets

Ssortingng someSsortingng = “C: \ path”; someSsortingng = someSsortingng.replace (“\” “,” “);