arborescence java et excel! - Java - Programmation
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.
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
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
Marsh Posté le 22-08-2007 à 13:14:25
j'étais parti manger
tu recrées ta structure de fichier sous forme de classe java, après tu peux bien compter ce que tu veux.
Code :
|
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.
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!