44 votes

Liste des actifs dans un sous-répertoire à l'aide d'assetmanager.liste

Ma demande a un actif répertoire dans lequel j'ai déversé un tas de fichiers de texte j'ai besoin de charger à l'exécution.

J'ai un répertoire complet des actifs d'un type particulier (c'est à dire, les "actifs/subdir") et je veux charger tous les fichiers dans ce répertoire, une à la fois.

J'ai un code comme ceci:


AssetManager assetMgr = getAssets();

String[] assetsIWant = assetMgr.list("subdir");

for(String asset: assetsIWant) {
  doAssetyThing(asset);
}

J'ai essayé un tas de versions différentes du paramètre à assetMgr.list() et ne suis pas aller n'importe où.

Si j'utilise "/", j'obtiens une liste contenant les "actifs" de répertoire, et un peu aléatoire d'autres éléments (META_INF, par exemple). Si je passe toute autre chaîne de caractères (comme "actifs" ou "actifs/" ou "/actifs" ou "/assets/" ou "mysubdir" ou "/mysubdir" ou "actifs/mysubdir" ou ...), ensuite, je reviens un tableau vide.

La documentation est malheureusement assez incohérente.

Quelqu'un sait ce que la formule correcte pour cette liste() paramètre est?

33voto

ddlw42 Points 241

En passant une chaîne vide semble fonctionner pour moi. Je obtenir une liste des fichiers dans mon répertoire actif quand je ne les suivants:

AssetManager aMan = appContext.getAssets();
String[] filelist = aMan.list("");

27voto

David-mu Points 1004

J'ai utiliser le code suivant pour la liste le nom du fichier dans les actifs/mondossier/:

String[] fileNames =getAssets().list("myFolder");
for(String name:fileNames){
     System.out.println(name);    
}

notez que le paramètre dans la liste méthode ne contient pas de "/".

14voto

Robin Points 61

Lorsque vous avez besoin d'avoir accès à un dossier plus en profondeur de votre hiérarchie utilisation

String[] fileNames =getAssets().list("myFolder"+File.separator+"mysubfolder");

au lieu de "/" à l'intérieur de la Chaîne, ce qui vous donnerait une Chaîne vide tableau en tant que résultat.

12voto

Hostile Points 384

Je ne suis pas sûr de savoir pourquoi cela fonctionne de cette façon, mais quand je liste "/", j'obtiens au niveau de la racine des choses, non les choses de mon "assets" répertoire. J'ai effectivement trouvé aucun moyen de bien la liste de mes biens dossier dans le peu de temps j'ai passé à essayer.

La solution que j'utilise est de créer un "subdir" répertoire à l'intérieur de mon "assets" répertoire. J'ai mis tous les atouts que je veux accéder à ce "subdir"et faites:

String[] assetsIWant = assetMgr.list("subdir");

Je ne sais pas pourquoi, "/" listes de l' "assets" répertoire lui-même comme l'un de ses fichiers, mais vous n'avez pas à spécifier l' "assets" répertoire au moment de donner des list d'un chemin. Peut-être quelqu'un d'autre le sait, mais j'espère que cette astuce va vous aider de toute façon.

6voto

Matt Points 1009

Il y a beaucoup de questions similaires autour de ce sujet, je soupçonne que vous utilisez le dossier des ressources dans un projet de bibliothèque. si vous essayez d'accéder à l'actif dans un projet de bibliothèque sur votre android, vous obtiendrez vider le contenu et les symptômes exacts que vous avez décrit ici

à partir de l'android "projets" de la documentation

source : http://developer.android.com/tools/projects/index.html

Projets de la bibliothèque ne peut pas comprennent les actifs

Les outils ne prennent pas en charge l'utilisation de matières premières de l'actif des fichiers (enregistré dans les actifs/ du répertoire) dans un projet de bibliothèque. Tous les actifs, les ressources utilisées par une application doit être stockées dans les actifs/ du répertoire de l'application du projet lui-même. Toutefois, la ressource de fichiers enregistrés dans le res/ répertoire sont pris en charge.

si c'est le cas, la réponse est que vous ne devriez comprennent les actifs dans le dossier assets de votre projet d'application PAS dans un projet marqué comme une bibliothèque (vous pouvez le vérifier en cliquant droit sur votre projet et sélectionnez propriétés, sélectionnez l'android d'entrée, sur la gauche, et de regarder à l'est de la bibliothèque de case à cocher)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X