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
amine - 30 avril 2010 à 14:17
A voir également:
- Lire fichier java
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire fichier epub - Guide
- Fichier rar - Guide
- Lire fichier bin - Guide
- Waptrick java football - Télécharger - Jeux vidéo
8 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
3 juil. 2008 à 09:31
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 :
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.
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.
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
3 juil. 2008 à 09:51
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.
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.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
3 juil. 2008 à 10:08
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.
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.
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
3 juil. 2008 à 10:14
3 juil. 2008 à 10:14
Merci beaucoup, cela me convient tout à fait, je vais pouvoir terminer mon programme :p
Encore merci.
Encore merci.
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
3 juil. 2008 à 11:30
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.
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.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
3 juil. 2008 à 11:43
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...
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
704
3 juil. 2008 à 11:50
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;
}
}
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;
}
}
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
3 juil. 2008 à 14:15
3 juil. 2008 à 14:15
Voici la fonction statique à ajouter à ta classe qui te permettra de lire ton fichier :
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 :
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.
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.
varfendell
Messages postés
3256
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
8 février 2020
704
3 juil. 2008 à 14:21
3 juil. 2008 à 14:21
Je vous remercie :)
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 ?
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 ?