Fichiers : lister les fichiers contenus dans un dossier

Pour charger 10 images, 10 sons, ou dix fichiers quelconques, on peut passer par une liste que l’on écrit en tête de fichier. Mais ça peut être fastidieux. Voici une classe permettant de lister les fichiers (en choisissant le type de fichier) contenu dans un dossier provenant du dossier du sketch.

Précédent | 21/27 | Suivant

Le code de la classe

// list_directory(nom du dossier, extension a filtrer separés par des |);
// renvoie un array de string
class list_directory {
 String extension;
 String[] fichiers;
 String dossier;
 int nb_items;
 
 //constructeur
 list_directory(String dossier, String extension){
   this.dossier=dossier;
   this.extension=extension;
   fichiers = listFileNames(sketchPath + "/" + dossier, extension);
   nb_items=fichiers.length;
   println(fichiers.length + "elements");
 }
 
 // listage le contenu d'un dossier en ne prenant que les extensions fournies -------------------------
 String[] listFileNames(String dir, String extension) {
   File file = new File(dir);
   if (file.isDirectory()) {
     String names[] = file.list();

     // procedure d'elimination des fichiers non concernés
     String[] names_ok= {};
     for(int i=0; i<names.length;i++) {
       String[] m1 = match(names[i], extension);
       if (m1 != null) {
         names_ok=append(names_ok,dossier+"/"+names[i]);
       }
     }
     return names_ok;
   }
   else {
     // If it's not a directory
     println("le nom fourni n'est pas celui d'un dossier");
     return null;
   }
 }
}

Utiliser la classe

La classe s’utilise de manière traditionnelle : on crée un objet et on appelle le constructeur. On doit spécifier le nom du dossier (à partir de la racine du dossier du sketch) et les extensions désirées, séparées par des pipes ( | ). On obtient une liste directement utilisable dans une boucle.

import java.io.File; // necessaire seulement depuis la version 2b07 !

String dossier_source="database"; // nom du dossier
list_directory liste;

void setup(){
 size(600,600);
 liste = new list_directory(dossier_source, "jpg|png|gif");
}

void draw(){
   background(0);
   for (int i=0;i<liste.nb_items;i++) {
       text(liste.fichiers[i],10,20+(i*20));
   }
}