Récupérer le fichier le plus récent d'un répertoire et afficher son contenu

kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 25 janv. 2007 à 11:12
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 26 janv. 2007 à 11:12
Bonjour, 

Mon souci aujourd'hui c'est de pouvoir récupérer le fichier le plus récent d'une liste de fichier d'un répertoire et d'afficher le contenu. Je pense qu'il ya quelques lignes à rajouter dans mon code mais je ne sais pas trop où et quoi(je crois que pour la lecture il faut utiliser Bufferred file reader et iterator mais j'en sais pas plus). Voici mon code qui me permet de récupérer tous les fichiers du dossier C:\temp. :

package exemple;

import java.io.*;

public class test {

public test() {
super();
}

public void findFiles(String directoryPath) {
File directory = new File(directoryPath);
if(!directory.exists()){
System.out.println("Le fichier/répertoire '"+directoryPath+"' n'existe pas");
}else if(!directory.isDirectory()){
System.out.println("Le chemin '"+directoryPath+"' correspond à un fichier et non à un répertoire");
}else{
File[] subfiles = directory.listFiles();
String message = "Le répertoire '"+directoryPath+"' contient "+ subfiles.length+" fichier"+(subfiles.length>1?"s":"");
System.out.println(message);
for(int i=0 ; i<subfiles.length; i++){
System.out.println(subfiles[i].getName());
}
}
}

public static void main(String[] args) {
test finder = new test();
finder.findFiles("C:/temp");

}
}





olivier

9 réponses

super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
25 janv. 2007 à 13:40
Yop yop,

essaye ca ! Par contre ca liste aussi les fichiers cachés, les répertoires ...
Mets des filtres si tu les veux pas, mais la j te laisse chercher un peu + de ton coté !!

++ Toinou

public void findFiles(String directoryPath) {
File directory = new File(directoryPath);
if (!directory.exists()) {
System.out.println("Le fichier/répertoire '" + directoryPath +
"' n'existe pas");
}
else if (!directory.isDirectory()) {
System.out.println("Le chemin '" + directoryPath +
"' correspond à un fichier et non à un répertoire");
}
else {
File[] subfiles = directory.listFiles();
String message = "Le répertoire '" + directoryPath + "' contient " +
subfiles.length + " fichier" + (subfiles.length > 1 ? "s" : "");
System.out.println(message);

File moreRecentFile = null;
Date moreRecentDate = null;
for (int i = 0; i < subfiles.length; i++) {
File fileTmp = subfiles[i];
Date dateTmp = new Date(fileTmp.lastModified());
if(moreRecentDate==null){
moreRecentFile = fileTmp;
moreRecentDate = dateTmp;
}
else{
if(dateTmp.after(moreRecentDate)){
moreRecentFile = fileTmp;
moreRecentDate = dateTmp;
}
}
}
//si y avait aucun fichier
if(moreRecentFile==null){
System.out.println("Aucun fichier trouvé sous le repertoire " + directoryPath);
}
else{
System.out.print("Le fichier le plus récent est :" + moreRecentFile.getName());
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy G 'at' HH:mm:ss z");
sdf.setLenient(false);
System.out.println(" changé à la date : " + sdf.format(moreRecentDate));
}

}
}
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
25 janv. 2007 à 13:44
Re,

Bon j'ai quelque peu avancé. J'ai réussi à afficher tous les fichiers du dossier temp. Et j'arrive à récupérer le plus récent dans la console. J'ai ajouter une ligne pour lister les fichiers texts et seulement récupérer le fichier text le plus récent. C'est là que sa coince. Ci-dessous mon code modifié. La ligne que j'ai rajouté pour les fichiers text est :    if(subfiles[i].getAbsolutePath().endsWith(".txt")= = true
){
.Depuis il me génère une erreur :


Le répertoire 'C:/temp' contient 74 fichiers



Exception in thread "main"




java.lang.NullPointerException


at exemple.Test.findFiles(




Test.java:32

)at exemple.Test.main(



Test.java:39

)

Moi je voulais qu'il me compte le nombre et me liste les fichiers textes et ensuite qu'il me dise lequel est le plus récent.Donc si vous avez une petite idée sur mon nouveau problème. Sa m'énerve car je suis sur qu'il ne manque quasiment rien.








package




exemple;




import




java.io.*;




public








class

Test {



public

Test() {



super

();}



public





void

findFiles(String directoryPath) {File directory =



new

File(directoryPath);File moreRecentFile =



null

;



if

(!directory.exists()){System.



out

.println(

"Le fichier/répertoire '"
+directoryPath+

"' n'existe pas"
);}



else





if

(!directory.isDirectory()){System.



out

.println(

"Le chemin '"
+directoryPath+

"' correspond à un fichier et non à un répertoire"
);}



else

{File[] subfiles = directory.listFiles();

String message =


"Le répertoire '"
+directoryPath+

"' contient "
+ subfiles.

length
+

" fichier"
+(subfiles.

length
>1?

"s"
:

""
);System.



out

.println(message);



for

(


int

i=0 ; i<subfiles.

length
; i++){File subfile = subfiles[i];



if

(subfiles[i].getAbsolutePath().endsWith(

".txt"
)==


true

){System.



out

.println(subfiles[i].getName());



if

(moreRecentFile !=


null

&& subfile.lastModified()>moreRecentFile.lastModified()) {moreRecentFile = subfile;

}



else

{moreRecentFile = subfile;

}

}

System.



out

.println(

"Le fichier le plus récent du répertoire "
+directoryPath +

" est "
+moreRecentFile.getName());}

}

}



public





static





void

main(String[] args) {Test finder =



new

Test();finder.findFiles(


"C:/temp"
);

}

}



Merci d'avnce,
olivier
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
25 janv. 2007 à 13:53
Ben a ton premier coup dans la boucle moreRecentFile est null donc tu chope un nullpointer c est normal, c est pour ca que dans le code que j t ai filé j l inialise le 1er coup !!

++ Toinou
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
25 janv. 2007 à 14:36
Yo,

Bon sa y est sa fonctionne. J'ai un peu changé le code mais sa fonctionne nikel. Voici ce que sa donne.

public

void findFiles(String directoryPath) {File directory =

new File(directoryPath);
File moreRecentFile =
null;

// verification des parametres
if(!directory.exists()){
System.
out .println(
"Le fichier/répertoire '"+directoryPath+
"' n'existe pas");

return;
}

if(!directory.isDirectory()){
System.
out.println(
"Le chemin '"+directoryPath+
"' correspond à un fichier et non à un répertoire");

return;
}

// liste des fichiers "*.txt"
File[] files = directory.listFiles(

new FilenameFilter() {

public
boolean accept(File dir, String name) {

return name.toLowerCase().endsWith(
".txt");
}
}
);

// cas alternatif: pas de fichiers "*.txt"
if (files.
length = = 0) {
System.
out .println(
"Pas de fichier texte");

return ;
}

// cas general: parcours et memorise le plus recent fichier
moreRecentFile =files[0];

for(File f:files) {

if (f.lastModified()>moreRecentFile.lastModified())
moreRecentFile = f;
}
System.
out .println(
"Le fichier le plus récent du répertoire "+directoryPath +
" est "+moreRecentFile.getName());
}
Par contre j'ai un problème pour lire les lignes de mon fichier. Je pense avoir la structure pour le lire :

String ligne ;
try
{
BufferedReader br = new BufferedReader (new FileReader (moreRecentFile)) ;
 
while((ligne = br.readLine()) != null)
{
 
}
 
}
catch(Exception e)
{
e.printStackTrace() ;
 

Mais je ne sais pas si c'est juste et ce qu'il faut mettre dans le while.
Voilà. Donc en fait ce que j'aimerais savoir c'est si mon code de lecture est juste et ce que je dois mettre dans le while.
Merci d'avance.

olivier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
25 janv. 2007 à 15:31
Yopla,

bon la sur ce coup la j crois qu en cherchant un peu sur google ou meme ce site t arrivera facilement à trouver comment lire et afficher un fichier en java !!
j peux pas te macher tout le boulot !!
Repost si tu galere sur un pb précis !!

Bon aprem
++ Toinou
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
25 janv. 2007 à 15:59
Voici mon code :

static

void lireFichierText()
throws FileNotFoundException, IOException{
Reader r new FileReader(moreRecentFile);BufferedReader br

new BufferedReader(r); r.close();

}

public
static
void main(String[] args) {Test finder =

new Test();finder.findFiles(

"C:/temp");

}

}

Aidez-moi, il me souligne MoreRecentFile et quand je met le nom du fichier à la place il met aucune erreur ms n'affiche pas les 2 lignes de mon fichier. Je désespère

olivier
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
25 janv. 2007 à 16:32
Bon laissez tmober l'étape d'ouverture et d'affichage des lignes du fichier.

Dans mon fichier text il y a 2 lignes. Elles sont composés comme sa:

nom\tprénom\tsociété\tfonction\tdate\r
MAS\tSébastien\tLivinfo\tDirecteur Commercial\t26\01\2007

\t pour une tabulation et \r pour le retour chariot.

Pouvez me dire ce que je dois rajouter à mon code existant pour pouvoir parser ces 2 lignes. Car le but de la manip c'est de pouvoir afficher dans un programme existant les informations précédantes. La première ligne correspond à des champs et la deuxième à leur valeur.

Voilà. Svp j'ai vraiment besoin d'aide car j'y arrive pas la. Je vous redonne mon code précédent si vous pouvez m'aider.

package exemple;
 
import java.io.*;
 
publicclass Test {
 
public Test(){
super();
}

public  void findFiles(String directoryPath){
File directory = new File(directoryPath);
File moreRecentFile = null;

// verification des parametres
if(!directory.exists()){
System.out.println("Le fichier/répertoire '"+directoryPath+"' n'existe pas");
return;
}
if(!directory.isDirectory()){
System.out.println("Le chemin '"+directoryPath+"' correspond à un fichier et non à un répertoire");
return;
}

// liste des fichiers "*.txt"
File[] files = directory.listFiles(
new FilenameFilter(){
publicboolean accept(File dir, String name){
return name.toLowerCase().endsWith(".txt");
}
}
);

// cas alternatif: pas de fichiers "*.txt"
if(files.length==0){
System.out.println("Pas de fichier texte");
return;
}

// cas general: parcours et memorise le plus recent fichier
moreRecentFile=files[0];
for(File f:files){
if(f.lastModified()>moreRecentFile.lastModified())
moreRecentFile = f;
}

System.out.println("Le fichier le plus récent du répertoire "+directoryPath +" est "+moreRecentFile.getName());

 

}

 
 
 
 
 

publicstaticvoid main(String[] args){
Test finder = new Test();
finder.findFiles("C:/temp");

}
}

olivier
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
25 janv. 2007 à 17:30
Vous me seriez d'un grand secours si vous pouviez me dire comment parser mon fichier text.
Je l'é créé a la main et les 2 lignes sont :

nom\tprénom\tsociété\tfonction\tdate\r
MAS\tSébastien\tLivinfo\tDirecteur Commercial\t26\01\2007

La première ligne correspond au nom des champs de mon appli et la deuxième au valeur. Ce que je voudrais c'est parser mon fichier text pour pouvoir afficher les valeurs dans mon appli. Voilà le but de la manip.
olivier
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
26 janv. 2007 à 11:12
Bonjour,

SA Y EST! J'ai réussi à résoudre cette histoire de parsing et de lecture. Seul un problème minime subsiste. C'est à propos de SWT :
pouvez-vous juste me donner la méthode qui me permet de définir le statut de bouton dans des onglets.Car dans mon appli on peut naviguer par les boutons ms aussi par des onglets, quand par exemple je navigue dans les onglets et que je veux aller dans le dernier onglet mon bouton suivant doit être désactivé.sa doit être monOnglet.addquelquechose mais je sais pas quoi. Pourriez-vous juste s'il vous plaît me dire cela. La addSelection n'existe que pour les boutons, pas pour les tabItem. Voilà.

Merci encore.<!-- / message -->
olivier
0
Rejoignez-nous