J'essaie d'obtenir récursive une structure de répertoire en Java, sur un émulateur Android, avec ce que je pense est un peu assez simple de code:Java/Android fichier récursive NullPointerException
public void list(File file)
{
if(file.isDirectory())
{
File[] children = file.listFiles();
for(int i = 0; i < children.length; i++)
{
Log.d(TAG, children[i].getName());
list(children[i]);
}
}
}
Il fonctionne bien (jusqu'à présent) à moins que je l'exécute à la racine de la carte SD de l'émulateur, à quel point il jette une exception de pointeur nul. LogCat prétend qu'il est lancé lorsque la méthode s'appelle elle-même, mais je dois envelopper toute la boucle for dans un bloc try/catch afin d'attraper l'exception. J'ai essayé environ une demi-douzaine de permutations sur le même type de thème, et ce qui précède est le plus fade et le plus sûr que je puisse trouver, mais ils jettent tous cette erreur. Je suis soit en train de faire quelque chose de stupide, ou il y a un objet étrange qui se cache dans la racine de la carte SD de l'émulateur qui rapporte comme un répertoire mais retourne une valeur fausse avec .listFiles(). Cela .android_security semble certainement un peu shifty.
Quelqu'un aurait-il l'amabilité de me dire lequel, si l'un d'entre eux, est?
D'autres ont répondu à la question (vérification nulle), mais voici la raison. 'File.listFiles()' retournera null (par opposition à un tableau vide) s'il ne peut pas lister les fichiers pour une raison quelconque. Un exemple pourrait être les autorisations de sécurité interdisent, un autre pourrait être un lien symbolique invalide. Pour une raison quelconque, cela ne jette pas 'java.io.IOException' malgré le fait que d'autres méthodes de la classe le font dans des situations similaires. –