2017-07-02 1 views
0

Après avoir essayé de comprendre cela par moi-même pendant un certain temps, il est temps de vous demander: la communauté! Je suis sûr que la solution devrait être quelque part dans un autre article, mais je ne peux tout simplement pas le trouver (ou l'appliquer à mon code).Android/Java: noms de fichiers de dossier brut à tableau

Je veux obtenir les résultats suivants: Lors du lancement de mon application android, je veux appeler une méthode qui effectue les opérations suivantes:

Lire tous les noms de fichiers dans le répertoire « res/brut », dans lequel j'ai stocké plusieurs jpegs et stockez les noms de ces fichiers dans un tableau. Je suppose qu'il ne devrait pas être trop difficile de répondre, mais je ne peux tout simplement pas comprendre par moi-même. J'ai regardé dans la commande listFiles(), et je suppose que c'est la voie à suivre, mais je ne peux pas le faire fonctionner. Vous trouverez ici un morceau de mon code avec les lignes correspondantes:

public class Example{ 
     File[] imageNames; 
     public void onCreate(){ 
       scanFolder(); 
       useTheDataFromScanFolder(); 
     } 

     public void scanFolder(){ 
       int numberOfFiles = new File("res\raw").listFiles().length; 
       imageNames = new File("res\raw").listFiles(); 
     } 

     useTheDataFromScanFolder(){ 
       //here I want to use numberOfFiles and the array imageId 
     } 
} 

J'espère que vous pouvez résoudre mon problème, ou me pousser dans la bonne direction! Merci d'avance!!

EDIT: Merci à CommonsWare je réussi à résoudre mon problème, j'ai réussi à le faire fonctionner avec le code suivant (les photos sont maintenant stockées dans/assets/ressources /):

String [] fileList;  

public void onCreate(Bundle savedInstanceState) { 
    listAssetFiles("resources"); 
} 

public boolean listAssetFiles(String path) { 
    try { 
     fileList = getAssets().list(path); 
    } catch (IOException e) { 
     return false; 
    } 
    return true; 
} 
+1

vous ne pouvez pas lire les dossiers par programme dans votre structure de projet comme ceci. Sur un apk, tout ce sont des ressources et non des fichiers comme dans un système de fichiers avec des dossiers etc ... – Opiatefuchs

Répondre

3

Lire tous les noms de fichiers dans le répertoire "res/raw"

Il n'y a pas de répertoire res/raw/ sur l'appareil Android. Il peut y avoir un répertoire res/raw/ dans votre projet d'application Android sur votre ordinateur de développement. Les ressources ne sont pas des fichiers sur le périphérique, mais des entrées dans le fichier APK. Et, par conséquent, il n'y a pas de noms de fichiers.

La solution la plus simple serait de déplacer ces choses à assets/. Ensuite, vous pouvez utiliser AssetManager et list() pour récupérer les noms de ces actifs et utiliser open() pour obtenir un InputStream sur un. Bien que les ressources ne soient pas non plus des fichiers sur l'appareil, l'API ressemble davantage à un fichier.

Si vous voulez coller aux ressources brutes, vous devez utiliser la réflexion Java pour itérer sur tous les champs définis static sur R.raw pour trouver leurs ID de ressource, puis utilisez openRawResource() sur un objet Resources() pour obtenir le InputStream.

+0

Merci, j'ai réussi à résoudre mon problème comme vous pouvez le voir dans mon edit. Avez-vous des conseils pour rationaliser le code? – daan166

+0

@ daan166: Pas particulièrement, car il n'y a pas beaucoup de code à rationaliser. – CommonsWare