arborescence java et excel!

arborescence java et excel! - Java - Programmation

Marsh Posté le 21-08-2007 à 14:50:54    

Bonjour tout le monde je m'adresse à vous car j'ai un petit problème de code. j'ai créer une arborescence que je mets dans un fichier cvs. Seul problème que j’ai rencontré, c’est qu’en fait je calcule le nombre de fichier qu’il y a dans les sous répertoires en fonctions de leur extension mais j’aimerais qu’au niveau des dossiers racines soit inscrit le nombre total de fichiers toujours selon les extensions. Je sais pas si je me suis bien faite comprendre mais en gros j’ai un dossier Données qui contient un sous dossier Adresses qui celui ci contient des fichiers xls, doc, pdf, un sous dossiers Téléphones qui contient des fichiers à extensions différentes, pour chaque sous dossiers j’arrive à récupérer le nombre de chaque fichier selon son extension mais je n’arrive pas à récupérer le nombre total de fichiers pour le dossier comprenant les deux sous dossiers.
Pouvez vous m’aider?
 
package com.chanel.lister;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
 
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.tree.DefaultMutableTreeNode;
 
import com.chanel.lister.filters.DocFilter;
import com.chanel.lister.filters.EpsFilter;
import com.chanel.lister.filters.JpgFilter;
import com.chanel.lister.filters.PdfFilter;
import com.chanel.lister.filters.SitFilter;
import com.chanel.lister.filters.TifFilter;
import com.chanel.lister.filters.XlsFilter;
 
/**
 * Classe permettant d afficher l'arborescence des disque dur
 */
public class Lister {
 
 private File fichier = null; // RAJOUT = fichier de sortie
 
 private FileWriter fw = null; // RAJOUT = Writer sur la sortie
 
 private boolean finished = false;
 
 private int prof = 0;
 
 public Lister(String start) {
 
  // MODIFICATION = initialisation du fichier de sortie
  // Creation du lien symbolique vers notre fichier
  this.fichier = new File("Resultat.csv" );
 
  // si le fichier existe, on le detruit
  if (this.fichier.exists())
   fichier.delete();
  try { // Dans tous les cas, on le crée ainsi que son Writer
   fichier.createNewFile();
   this.fw = new FileWriter(this.fichier);
   
   //Entete du tableau
   this.fw.write("Chemin; Profondeur; Nb PDF; Taille PDF; Nb EPS; Taille EPS; Nb JPG; Taille JPG; Nb TIF; Taille TIF; Nb DOC; Taille DOC; Nb XLS; Taille XLS; Nb SIT; Taille SIT\n" );
   
  } catch (IOException e) {
   e.printStackTrace();
  }
 
  File myroot = new File(start);
  // on définit notre premier noeud
  DefaultMutableTreeNode racine = getSubDirs(myroot);
 
  // On attend la fin
  while (!finished);
 
  // On oublie pas de fermer le fichier
  try {
   this.fw.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 /**
  * Méthode récursive permettant de récupérer tous les fichiers et sous
  * dossiers d un autre
  */
 private DefaultMutableTreeNode getSubDirs(File root) {
   
  // Calcul de la profondeur  
  prof++;
   
  // on créé un noeud
  DefaultMutableTreeNode racine = new DefaultMutableTreeNode(root, true);
 
  // on recupère la liste des fichiers et sous rep
  File[] list = root.listFiles();
 
  // Si c'est un dossier...
  if (list != null) {
   // MODIFICATION
   // ---------------------------------------------------------------
   // ----------------------------------------------------------------------------
   // ici on crée différente listes de fichier dont les types nous
   // interesse.
   File[] listPdf = root.listFiles(new PdfFilter());
   File[] listEps = root.listFiles(new EpsFilter());
   File[] listJpg = root.listFiles(new JpgFilter());
   File[] listTif = root.listFiles(new TifFilter());
   File[] listDoc = root.listFiles(new DocFilter());
   File[] listXls = root.listFiles(new XlsFilter());
   File[] listSit = root.listFiles(new SitFilter());
     
 
   // Maintenant que les listes sont là, il faut bien entendu compter
   // le nombre de fichiers et la taille totale
   // Le mieux c'est une nouvelle méthode pour que ce soit plus
   // clair... on l'appelle getStats()
   int nbPdf = 0;
   double taillePdf = 0;
   if (listPdf.length > 0) {
    nbPdf = listPdf.length; // Le nombre de Pdf trouvés
    taillePdf = getStats(listPdf)/1024/1024.0; // La taille du total de
    // tous les Pdf
   }
 
   int nbEps = 0;
   double tailleEps = 0;
   if (listEps.length > 0) {
    nbEps = listEps.length;
    tailleEps = getStats(listEps)/1024/1024.0;
   }
   
   int nbJpg = 0;
   double tailleJpg = 0;
   if (listPdf.length > 0) {
    nbJpg = listJpg.length; // Le nombre de JPG trouvés
    tailleJpg = getStats(listJpg)/1024/1024.0; // La taille du total de
    // tous les JPG
   }
   
   int nbTif = 0;
   double tailleTif = 0;
   if (listTif.length > 0) {
    nbTif = listTif.length;
    tailleTif = getStats(listTif)/1024/1024.0;
   }
   
   int nbDoc = 0;
   double tailleDoc = 0;
   if (listDoc.length > 0) {
    nbDoc = listDoc.length;
    tailleDoc = getStats(listDoc)/1024/1024.0;
   }
   
   int nbXls = 0;
   double tailleXls = 0;
   if (listXls.length > 0) {
    nbXls = listXls.length;
    tailleXls = getStats(listXls)/1024/1024.0;
   }
   
   int nbSit = 0;
   double tailleSit = 0;
   if (listSit.length > 0) {
    nbSit = listSit.length;
    tailleSit = getStats(listSit)/1024/1024.0;
   }
   
 
   // Desormais on a les infos, il faut les sauver !
   try {
    // ici c'est l'ecriture dans le tableur (MODE vertical)
    // this.fw.write(root.getAbsolutePath() + "\n" );
    // this.fw.write("PDF; " + nbPdf + "; " + taillePdf + "\n" );
    // this.fw.write("EPS; " + nbEps + "; " + tailleEps + "\n" );
    // ...
     
    //Mode horizontal
    this.fw.write(root.getPath() + "; " + prof + ";" + nbPdf + "; " + taillePdf + "; "+ nbEps + "; " + tailleEps + "; " + nbJpg + "; " + tailleJpg + "; " + nbTif + "; " + tailleTif + "; " + nbDoc + "; " + tailleDoc + "; " + nbXls + "; " + tailleXls +"; " + nbSit + "; " + tailleSit +"\n" );
     
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
 
   // /////////////////////////////////////////////////////////////////////////////
 
   // pour chaque sous rep on appel cette methode => recursivité
   for (int j = 0; j < list.length; j++) {
    DefaultMutableTreeNode file = null;
    if (list[j].isDirectory()) {
     file = getSubDirs(list[j]);
     racine.add(file);
    }
   }
  }
  this.finished = true;
  prof --;
  return racine;
 }
 
 // Ici on renvoi la taille cumulée de tous les fichiers de la liste
 public int getStats(File[] list) {
  int total = 0;
  for (int i = 0; i < list.length; i++) {
   total += list[i].length();
  }
  return total;
 }
 
 // main
 public static void main(String[] args) {
  JFrame fr = new JFrame();
  JFileChooser chooser = new JFileChooser();
  chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
 
  int returnVal = chooser.showOpenDialog(fr);  
 
  if (returnVal == JFileChooser.APPROVE_OPTION) {
  System.out.println("Scan en cours de : "+ chooser.getSelectedFile().getName());
  Lister ls = new Lister(chooser.getSelectedFile().getAbsolutePath());
  }
 
  else System.out.println("Abandon du scan" );
 
  fr.dispose();
 
 }
}
 
donc voila la il me génère un fichier csv avec l'arborescence et le nombre et la taille des fichiers selon leur extension le seul problème c'est que moi j'aimerais avoir en plus de ca le total de tous ces fichiers sur la ligne du dossier parent (ici de profondeur 4) mais je ne vois pas du tout comment faire!
 
merci encore pour votre aide!

Reply

Marsh Posté le 21-08-2007 à 14:50:54   

Reply

Marsh Posté le 22-08-2007 à 11:40:42    

j'ai pas tout lu, mais là tu écris directement dans ton fichier au fur et à mesure de ton parcours de répertoire, c'est ça ?
 
si oui, tu devrais plutôt créer un objet qui contient tes info et ensuite écrire ton csv par rapport à cet objet. Ca te permettra en plus de faire plus que de la sortie csv si un jour ça t'en prend l'envie.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 22-08-2007 à 11:51:41    

oui c ça j'écris directement dedans. Je suis débutante alors ce que tu me proposes je sais pas du tout comment le faire. et est ce que ca résoudrai le problème pour les dossiers parents n'ayant pas de fichiers réels mais juste des sous dossiers contenant les fichiers pour en faire les totaux?
merci pour ta réponse

Reply

Marsh Posté le 22-08-2007 à 12:01:12    

bha tu recrées ta structure de fichier sous forme de classe java, après tu peux bien compter ce que tu veux.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 22-08-2007 à 12:18:20    

hum ca me laisse perplexe ... tu pourrais me donner un exemple de comment faire ? oui je sais je suis pas très douée mais c'est pour valider mon stage et j'aimerais que ce soit bien fait!
merci beaucoup

Reply

Marsh Posté le 22-08-2007 à 13:14:25    

j'étais parti manger :o
tu recrées ta structure de fichier sous forme de classe java, après tu peux bien compter ce que tu veux.

 
Code :
  1. public class Repertoire {
  2.     private List sousRepertoire; // Liste des sous répertoires de ton répertoire
  3.     private List fichiers; // Liste des fichiers présents dans ton répertoire (des String ?)
  4.  
  5.     /* getters
  6.     ...
  7.     ...
  8.     setters
  9.     ...
  10.     ... */
  11.     
  12.     public int getNombresDeFichiers() {
  13.         int nb = fichiers.size();
  14.         Iterator subRepIt = sousRepertoire.iterator();
  15.         Repertoire subRep;
  16.         while (subRepIt.hasNext()) {
  17.             subRep = (Repertoire) subRepIt.next();
  18.             nb += subRep.getNombreDeFichiers();
  19.         }
  20.         return nb;
  21.     }
  22. }


ou un truc du genre.

 

Après, au lieu d'écrire dans ton csv, tu instancies des objets Repertoire.
Une fois fait, tu écris ton fichier comme tu veux.


Message édité par brisssou le 22-08-2007 à 13:15:17

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 22-08-2007 à 14:13:19    

merci beaucoup  
je vais tenter ça !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed