Java: lire le contenu d'un fichier

Résolu/Fermé
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 - 2 juil. 2008 à 14:58
 amine - 30 avril 2010 à 14:17
Bonjour,

Je désir savoir comment s'y prendre pour sélectionner un fichier lorsque son adresse est rentré, l'adresse debutant à partir du poste de travaille (ex: F:\projet\projet accessibilité\rapport\exemples).
Le programme lira alors le contenu du fichier et le placera dans une variable, un String je pense.
J'ai déjà fait une première version qui marche lorsque l'on rentre le texte directement, cette seconde version devra donc lire le texte du fichier (quelque soit son extension).

Merci d'avance.
A voir également:

8 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
3 juil. 2008 à 09:31
Bonjour,

Ta question reste encore un peu "flou" dans le sens où tu peux lire un fichier de plusieurs manières différentes en Java. Reste à savoir ton besoin : est-ce que tu souhaite lire tout le fichier d'un coup, ligne par ligne, lire un tableau de byte, lire une string directement, etc. ?

Voici un exemple tout simple de lecture ligne par ligne d'un fichier :

	InputStreamReader flog	= null;
	LineNumberReader llog	= null;
	String myLine		     = null;
	try{ 
		flog = new InputStreamReader(new FileInputStream("path du fichier a remplacer") );
		llog = new LineNumberReader(flog);
		while ((myLine = llog.readLine()) != null) { 
                      // --- Affichage de la ligne lu depuis le fichier
                      System.out.println("Ligne : "+myLine);
                }
        }catch (Exception e){
               // --- Gestion erreur lecture du fichier (fichier non existant, illisible, etc.)
               System.err.println("Error : "+e.getMessage());
        }


Voilà, libre à toi de t'en inspirer pour faire ce que tu souhaite. Si tu veux t'y prendre différemment, la meilleur chose est de parcourir le net et de trouver des tutoriaux sur les façons de lire un fichier en Java.
Notamment cette page sur les flux d'entrée / sortie : https://anisfrikha.developpez.com/tutoriel/java-io/

Bon courage.
7
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
3 juil. 2008 à 09:51
Bonjour,

Voici un peu plus d'information sur ma demande:
Je souhaite en faite récuperer le contenu du fichier afin d'y effectuer une ou des regxp.
Il me faudrait donc une méthode qui prenne en paramettre le chemin d'acces au fichier à peu pres comme sa:

public String recupFichier (string chemin){ //'chemin' est le chemin pour acceder au fichier dont on doit
recuperer le contenu
string contenu = ""; //contiendra le contenu du fichier
String pos = System.getProperties().getProperty("user.dir"); //contient le chemin dans lequel on se trouve
l'application qu'on lance
.
.
.
}

J'ai pensé à utiliser la classe jdialog qui me permettrait d'afficher dans une fenetre l'arborescence des fichiers sur mon ordinateur, mais je n'ai pas réussi à la retrouver sur developez.com.
1
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
3 juil. 2008 à 10:08
Pour ce qui est de la lecture du fichier tu peux donc t'appuyer sur ce que j'ai donné plus haut.
Pour ce qui est d'avoir une fenêtre de dialog pour choisir le fichier à lire, regarde cette discussion :
http://www.commentcamarche.net/forum/affich 5974005 java importer un dossier d image

Il te faudra utiliser la classe JChooseFile de Java, par contre il s'agit d'un composant graphique, il te faudra une fenêtre et un panneau de contenu (JContentPane) pour mettre et utiliser ce composant. Mais je suppose que si tu pose la question c'est que tu as déjà fait une interface graphique.

Voilà, tu devrais donc pouvoir résoudre ton problème toi même avec tout ça.
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
3 juil. 2008 à 10:14
Merci beaucoup, cela me convient tout à fait, je vais pouvoir terminer mon programme :p

Encore merci.
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
3 juil. 2008 à 11:30
Bonjour,

Voici un peu plus d'information sur ma demande:
Je souhaite en faite récuperer le contenu du fichier afin d'y effectuer une ou des regxp.
Il me faudrait donc une méthode qui prenne en paramettre le chemin d'acces au fichier à peu pres comme sa:

public String recupFichier (string chemin){ //'chemin' est le chemin pour acceder au fichier dont on doit
recuperer le contenu
string contenu = ""; //contiendra le contenu du fichier
String pos = System.getProperties().getProperty("user.dir"); //contient le chemin dans lequel on se trouve
l'application qu'on lance
.
.
.
}

J'ai pensé à utiliser la classe jdialog qui me permettrait d'afficher dans une fenetre l'arborescence des fichiers sur mon ordinateur, mais je n'ai pas réussi à la retrouver sur developez.com.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
3 juil. 2008 à 11:43
Je pense que le plus rapide sera que tu mettes ton code déjà fait pour qu'on le complète...
0

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

Posez votre question
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
3 juil. 2008 à 11:50
voici le code de l'application, si vous voulez la faire marcher, je peut vous passer les 3 autres classes qui marche.

package version;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import resultat.AfficheResultat;
import services_à_tester.Regexp1;

public class Version2 {


/*
*Version1: récupère une chaine de caractere à analyser
*/
public void version() {

//On lance une boucle infini pour le programme:
for (;;){
//on met à zero le nombre de lancement de la regxp et la chaine de caractère
int nombre = -1;
String valu = "";
//on demande de saisir la chaine de caractères:
System.out.println("saisisser le chemin d'acces au fichier ou exit pour revenir au choix de version ");
//on assigne la saisie à une variable:
valu = lecture();
//si la valeur est "exit", on sort de l'application:
if (valu.equals("exit")){
break;
}else{
/*
* ici, mettre le code qui permettrait de recuperer
* le contenu du fichier dont le chamin à été mis en parametre
* dans une variable string contenu
*/
}


//choix du nombre de fois que doit être lancée la regxp
while (nombre == -1){
//on demande de saisir le nombre d'éxecution de la regxp:
System.out.println("saisisser le nombre de fois que vous voulez lancer la regexp");
//on assigne la saisi à une variable:
String nbr = lecture();
//si l'objet saisi est un nombre, on le transfert dans une variable de type integer:
if (nbr.matches("[0-9]+")){
nombre = Integer.parseInt(nbr);
System.out.println("la valeur "+nombre+" a été assignée à la variable nombre.");
lancement(contenu,nombre);
}
//si l'objet saisi est un nombre négatif, on affiche un message d'erreur:
else if (nbr.matches("-[0-9]+")){
System.out.println("attention, veuillez saisir un nombre positif");
}
//sinon(si l'objet saisi n'est donc pas un nombre) on affiche un message d'erreur:
else{ System.out.println("attention, veuillez saisir un nombre");
}
}
break;
}
}
/*
*On lance dans cette méthode la regxp autant de fois que demandé par l'utilisateur
*puis on lance l'affichage du resultat
*/
public void lancement(String str, int nb){
Regexp1 reg1 = new Regexp1();
try {
long startTime = System.currentTimeMillis();
String reg = reg1.start(str, nb);
long endTime = System.currentTimeMillis();
AfficheResultat Aff = new AfficheResultat();
Aff.resultat(startTime, endTime, reg, nb);
}

catch (java.lang.ArrayIndexOutOfBoundsException e) {
}
}
/*
*Permet de récupérer le texte (String)
*/
public static String lecture() {
BufferedReader stdin = new BufferedReader ( new InputStreamReader(System.in));
String ret;
try {
ret = stdin.readLine();
}catch (IOException e){ret = null;}
return ret;
}
}

0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
3 juil. 2008 à 14:15
Voici la fonction statique à ajouter à ta classe qui te permettra de lire ton fichier :
public static readFile ( String theFileName ){
        InputStreamReader flog	= null;
	LineNumberReader llog	= null;
	String myLine		     = null;
        String myConcatLines     = "";
	try{ 
		flog = new InputStreamReader(new FileInputStream("path du fichier a remplacer") );
		llog = new LineNumberReader(flog);
		while ((myLine = llog.readLine()) != null) { 
                      // --- Ajout de la ligne au contenu
                      myConcatLines += myLine;
                }
        }catch (Exception e){
               // --- Gestion erreur lecture du fichier (fichier non existant, illisible, etc.)
               System.err.println("Error : "+e.getMessage());
               return null;
        }
        return myConcatLines;
}


Le retour de cette fonction peut être:
- null -> cas d'erreur de lecture
- "" / vide -> rien a lire
- une chaine de caractère non nulle et non vide -> le contenu du fichier

Là où tu as mis tes commentaires dans le code, tu remplace par l'appel à la fonction :
     contenu = readFile("chemin du fichier");


Pour ce qui est de la partie "demande à l'utilisateur le chemin d'accès au fichier via une fenetre", puisque tu n'a pas d'application graphique tu ne peux pas utiliser l'objet JChooseFile dans ton programme, il te reste donc plus qu'à demander à l'utilisateur de le rentrer comme tu lui demande de rentrer les chiffres.
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
3 juil. 2008 à 14:21
Je vous remercie :)
0
Salut à tous moi aussi j'aimerais pouvoir ouvrir un fichier en donnant le "path" à partir du poste de travail mais j'ai un problème voici quelques lignes de mon code:

a = new InputStreamReader(new FileInputStream("abce.txt") );
b = new LineNumberReader(a);
while ((ligne = b.readLine()) != null)
{
System.out.println(ligne+ " ") ;
}

Tout se passe bien quand je copie/colle le fichier à ouvrir DANS le dossier que j'ouvre avec mon application JAVA (BlueJ).

Mais dès que je mets le chemin par exemple:

a = new InputStreamReader(new FileInputStream("D:\ abce.txt") );

Il y a un message d'erreur à la compilation qui est : illegal escape character pour le caractère " \ "

Pouvez-vous m'aider ?
0
a = new InputStreamReader(new FileInputStream("D:\\ abce.txt") ); VOILA j'ai corrigé il faut rajouter un \
0
il suffit de mettre le chemin dans une variable que tu l'appel après en paramètres

String fileInPath = "D:\\ abce.txt";
a = new InputStreamReader(new FileInputStream(filePath) );
0