Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1370 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  arborescence java et excel!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

arborescence java et excel!

n°1601735
noukies
Posté le 21-08-2007 à 14:50:54  profilanswer
 

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!

mood
Publicité
Posté le 21-08-2007 à 14:50:54  profilanswer
 

n°1602236
brisssou
8-/
Posté le 22-08-2007 à 11:40:42  profilanswer
 

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
n°1602251
noukies
Posté le 22-08-2007 à 11:51:41  profilanswer
 

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

n°1602262
brisssou
8-/
Posté le 22-08-2007 à 12:01:12  profilanswer
 

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
n°1602277
noukies
Posté le 22-08-2007 à 12:18:20  profilanswer
 

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

n°1602312
brisssou
8-/
Posté le 22-08-2007 à 13:14:25  profilanswer
 

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
n°1602333
noukies
Posté le 22-08-2007 à 14:13:19  profilanswer
 

merci beaucoup  
je vais tenter ça !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  arborescence java et excel!

 

Sujets relatifs
VB/EXCEL : Inhiber boite de dialogueBDD sql internet gérer par application JAVA
Compiler sources java: trouve pas le javac.exe[résolu]ODBC et macro excel
Utilisation des PIA Excel dans un serveur qui n'a pas officeQuitter un fichier Excel ouvert via IE
[Résolu] Recherche de données dans différentes feuilles Excelemission/reception su un client Java
Applications financieres sous excel en Visual Basic[EXCEL] utiliser fonction excel dans VBA
Plus de sujets relatifs à : arborescence java et excel!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR