Bonjour,
L'écriture du programme qui permet de générer un graphe à partir d'un fichier csv fonctionne mais
le soucis c'est que suivant le filtrage effectue sur les fichiers d'un répertoire ça se gâte.
Je donne un mois et une année pour effectuer le filtrage.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import java.io.File;
import java.io.FileFilter;
public class Filter2 implements FileFilter{
private String mois;
private String annee;
private String extension;
public Filter2(String mois, String annee){
this.mois = mois;
this.annee = annee;
}
//Constructeur à partir de la description et de l'extension acceptée
public Filter2(String extension){
if(extension ==null){
throw new NullPointerException("La description (ou extension) ne peut être null.");
}
this.extension = extension;
}
//Implémentation de FileFilter
public boolean accept(File file){
if(file.isDirectory()) {
return false;
}
String nomFichier = file.getName().toLowerCase();
//String regex = ".*(05).*";
//String regex = "(.)*("+mois+"[0-9]{2}"+annee+")(.)*";
String regex=".*";
return nomFichier.matches(regex) && nomFichier.endsWith(extension);
}
public File[] getFiles(){
File [] files = null;
Filter2 csv = new Filter2(".csv",mois,annee);
File rep = new File("D:\\Documents and Settings\\pascal\\Desktop");
files = rep.listFiles(csv);
return files;
}
} |
classe qui contient le main.
La classe MoisCSD est la classe qui permet de génerer un graphe à partir d'un fichier csv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import java.io.File;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class TestCode extends ApplicationFrame{
private static final long serialVersionUID = 1L;
public TestCode(){
super("Test");
}
public static void main(String [] args){
Filter2 filter = new Filter2("05","07");
File [] files = filter.getFiles();
if(files.length == 0){
System.out.println("vide");
System.exit(0);
}
for(File f : files)
System.out.println(f.getAbsolutePath());
String fileName = files[0].getAbsolutePath();
final MoisCSD mois = new MoisCSD("Mois CSD",fileName);
mois.pack();
RefineryUtilities.centerFrameOnScreen(mois);
mois.setVisible(true);
mois.setDefaultCloseOperation(ApplicationFrame.EXIT_ON_CLOSE);
}
} |
Ce qui pose probleme est la méthode accept de Filter:
1 2 3 4 5 6 7 8 9 10 11
| //Implémentation de FileFilter
public boolean accept(File file){
if(file.isDirectory()) {
return false;
}
String nomFichier = file.getName().toLowerCase();
//String regex = ".*(05).*";
//String regex = "(.)*("+mois+"[0-9]{2}"+annee+")(.)*";
String regex=".*";
return nomFichier.matches(regex) && nomFichier.endsWith(extension);
} |
Lorsque la regex est :
J'obtiens :
1 2 3
|
D:\Documents and Settings\pascal\Desktop\Stats Mens PHL CSD_043007_171523_sgactdy.csv
D:\Documents and Settings\pascal\Desktop\Stats Mens PHL CSD_053107_171524_sgactdy.csv |
qui sont les 2 fichiers présent dans le bureau et le graphe qui est affiché contient les données du 1er.
Lorsque j'utilise :
String regex = "(.)*("+mois+"[0-9]{2}"+annee+")(.)*";
J'obtiens :
alors que le parsing devrait être ok(c'est un parsing de cette forme dont j'ai besoin)
car il contient le mois et l'année qui sont données en parametre du constructeur.
Enfin lorsque j'utilise
String regex = ".*(05).*";
j'obtiens :
1 2 3 4 5 6
| D:\Documents and Settings\pascal\Desktop\Stats Mens PHL CSD_053107_171524_sgactdy.csv
java.lang.NullPointerException
at MoisCSD.createDataset(MoisCSD.java:107)
at MoisCSD.createFrame1(MoisCSD.java:63)
at MoisCSD.<init>(MoisCSD.java:42)
at TestCode.main(TestCode.java:24) |
Le fichier qui est affiché est le correct mais ça donne ensuite une exception. Exception qui
n'apparait pas dans le premier cas.
J'aurai besoin d'aide pour savoir comment écrire la méthode accept.
Merci
Partager