2017-08-23 2 views
0

Je voudrais énumérer mes dossiers dans ma carte externe avec une simple pression sur un bouton (emplacement actuellement codage en dur juste pour obtenir le roulement à billes)Impossible d'ouvrir le dossier sd

public void onClickBtn(View v) { 
    File f = new File("/storage"); 
    File[] files = f.listFiles(); 
    for (File inFile : files) { 
     if (inFile.isDirectory()) { 
      Log.i("is directory", "here: " + inFile); 
     } 
    } 
} 

Ceci produit dans mon logcat:

I/is directory: here: /storage/3164-6330 
I/is directory: here: /storage/emulated 
I/is directory: here: /storage/Private 
I/is directory: here: /storage/enc_emulated 
I/is directory: here: /storage/self 

maintenant, je veux répéter le même processus, mais changer mon chemin vers «/stockage/3164-6330 » parce que je sais que ce où mes choses stocke les cartes SD

public void onClickBtn(View v) { 
    File f = new File("/storage/3164-6330"); 
    File[] files = f.listFiles(); //will cause error here 
    for (File inFile : files) { 
     if (inFile.isDirectory()) { 
      Log.i("is directory", "here: " + inFile); 
     } 
    } 
} 

Mais je reçois dans mon logcat:

Caused by: java.lang.NullPointerException: Attempt to get length of null array at com.example.abc.MainActivity.onClickBtn(MainActivity.java:141) 

qui est cette ligne:

for (File inFile : files) { 

Est-ce que quelqu'un sait pourquoi je générer un tableau nul? J'ai les deux fichiers et dossiers dans mon/storage/3164-6330 chemin. Merci!

+0

Avez-vous inséré la l'autorisation suivante dans le fichier manifeste de votre application: READ_EXTERNAL_STORAGE? – izakos

+0

@ user3579978 oui, je l'ai fait –

Répondre

0

listFiles() "Le tableau sera vide si le répertoire est vide Renvoie la valeur null si ce chemin abstrait ne dénote pas un répertoire, ou si une erreur d'E/S se produit." - link

Apparaît que ce dossier n'existe pas. Je pense que l'emplacement de la carte SD dépend de l'API que vous utilisez. le mien est le stockage/sdcard

Vous pouvez simplement appeler: Environment.getExternalStorageDirectory() pour obtenir l'emplacement sdcard.

EDIT: Je m'excuse, je n'ai pas vu cette dernière ligne à propos de savoir ceux qui existent. Essayez l'appel Environment.get comme je l'ai eu des problèmes similaires et a fini avec cela dans mon appel

0

essayer d'ajouter File.separator («/») à la fin du nom du dossier

public void onClickBtn(View v) { 
    File f = new File("/storage/3164-6330/"); 
    if (f.exists() && f.isDirectory()) { // safety check.. 
     File[] files = f.listFiles(); 
     for (File inFile : files) { 
      if (inFile.isDirectory()) { 
       Log.i("is directory", "here: " + inFile); 
      } 
     } 
    } 
}