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!