Rechercher : dans
Par :

Java: lire le contenu d'un fichier

Dernière réponse le 3 jui 2008 à 14:21:32 varfendell, le 2 jui 2008 à 14:58:58 
 Signaler ce message aux modérateurs

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. La vérité appartient à ceux qui la cherchent et non point à ceux qui prétendent la détenir.
(n'oubliez pas de mettre résolu si vous avez trouvé votre bonheur: pensez aux autres^^')

Configuration: Windows XP
Firefox 2.0.0.14

Meilleures réponses pour « java: lire le contenu d'un fichier » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Lire un fichier en .rbs VoirOn peut rencontrer parfois des fichiers en .rbs, issus d'un enregistrement ou un autre. La solution la plus simple pour lire ces fichiers est tout bêtement de remplacer l'extension .rbs par .mp3 Si vous ne voyez pas l'extension du fichier, faites...

1

kij_82, le 3 jui 2008 à 09:31:00

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 : http://anisfrikha.developpez.com/tutoriel/java-io/

Bon courage.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

2

varfendell, le 3 jui 2008 à 09:51:24

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. La vérité appartient à ceux qui la cherchent et non point à ceux qui prétendent la détenir.
(n'oubliez pas de mettre résolu si vous avez trouvé votre bonheur: pensez aux autres^^')

Répondre à varfendell

3

kij_82, le 3 jui 2008 à 10:08:32
  • +1

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.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

4

varfendell, le 3 jui 2008 à 10:14:51

Merci beaucoup, cela me convient tout à fait, je vais pouvoir terminer mon programme :p

Encore merci. La vérité appartient à ceux qui la cherchent et non point à ­ceux qui prétendent la détenir.
(n'oubliez pas de mettre résolu si vous avez trouvé votre bo­nheur: pensez aux autres^^')

Répondre à varfendell

5

varfendell, le 3 jui 2008 à 11:30:44

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. La vérité appartient à ceux qui la cherchent et non point à ceux qui prétendent la détenir.
(n'oubliez pas de mettre résolu si vous avez trouvé votre bonheur: pensez aux autres^^')

Répondre à varfendell

6

kij_82, le 3 jui 2008 à 11:43:04

Je pense que le plus rapide sera que tu mettes ton code déjà fait pour qu'on le complète...

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

7

varfendell, le 3 jui 2008 à 11:50:36

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;
}
}

La vérité appartient à ceux qui la cherchent et non point à ceux qui prétendent la détenir.
(n'oubliez pas de mettre résolu si vous avez trouvé votre bonheur: pensez aux autres^^')

Répondre à varfendell

8

kij_82, le 3 jui 2008 à 14:15:52

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.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

9

 varfendell, le 3 jui 2008 à 14:21:32

Je vous remercie :) La vérité appartient à ceux qui la cherchent et non point à ­ceux qui prétendent la détenir.
(n'oubliez pas de mettre résolu si vous avez trouvé votre bo­nheur: pensez aux autres^^')

Répondre à varfendell
Collection CommentÇaMarche.net