IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Recuperer le contenu d'un fichier avec son nom et son chemin


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 35
    Points : 27
    Points
    27
    Par défaut Recuperer le contenu d'un fichier avec son nom et son chemin
    Bonjour à tous,

    Voila, j'ai une application qui a besoin de récupérer le contenu d'un fichier dont on connait le nom et le chemin.
    Pour cela je lance une classe ReadFile avec en paramètres le nom et le chemin et celle si doit me retourner un String ( le contenu du fichier):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String Str = ReadFile.readFile(Name, Path);
    ma classe ReadFile ressemble pour l'instant à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class ReadFile {
    	public static String readFile (String theFileName, String thePathName){
    		InputStreamReader flog	= null;
    		LineNumberReader llog	= null;
    		String myLine		     = null;
    		String myConcatLines     = "";
    		try{ 
    		flog=newInputStreamReader(newFileInputStream("theFileName") );
    			llog = new LineNumberReader(flog);
    			while ((myLine = llog.readLine()) != null) { 
    				// --- Ajout de la ligne au contenu
    				myConcatLines += myLine;
    			}
    		}catch (Exception e){
    			// --- Gestion d'erreur de lecture du fichier
    			System.err.println("Error : "+e.getMessage());
    			return null;
    		}
    		return myConcatLines;
    	}
     
    }
    J'arrive donc a récupérer le contenu d'un fichier, mais seulement s'il est placé dans le répertoire de mon application.

    Comment faire donc pour lire un fichier qui ne soit pas dans le répertoire de mon application?

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pour ton problème, il suffit de spécifier un chemin complet...
    Si tu utilises un chemin relatif cela sera forcément par rapport au répertoire de travail de ton application...

    Mais je vois d'autres soucis :
    • Le fichier n'est pas fermé.
    • Tu utilises += sur des Strings dans une boucle, ce qui est très consommateur en mémoire.
    • Tu lis lignes par lignes alors que tu veux récupérer le fichier en entier, une lecture par bloc serait plus avantageuse.
    • Tu n'utilises pas les paramètres de la méthode ?
    • Tu devrais spécifier le charset lors de la lecture...


    Perso j'écrirais ceci de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    	public static String readFile (String theFileName) {
    		return readFile(theFileName, Charset.defaultCharset());
    	}
     
    	public static String readFile (String theFileName, Charset charset){
    		try {
    			Reader reader = new InputStreamReader(new FileInputStream(theFileName), charset);
    			try {
    				StringBuilder builder = new StringBuilder();
    				char[] cbuf = new char[8192]; // On utilise un buffer de 8192 chars
    				int len;
     
    				// On lit un maximum d'info qu'on copie dans le Reader
    				while ( (len=reader.read(cbuf)) >= 0 ) {
    					// Et on ajoute ce qu'on a lu :
    					builder.append(cbuf, 0, len);
    				}
     
    				return builder.toString();
    			} finally {
    				reader.close();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    (bien que je préférerais quand même remonter une exception plutôt que de renvoyer null)

    a++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    Bonjour adiGuba,

    Merci de ta réponse, mais il y a quelques trucs que je voudrais éclaircir:
    En faite mon application est censé tester une regxp sur le contenu du fichier.
    Je dispose dont d'un fichier test.txt qui comporte plusieurs ligne, et je voudrais les mettre toutes sur une seul ligne dans un variable. C'est pourquoi j'ai porté mon choix sur une variable de type String.
    Je n'ai pas très bien comprise comment fonctionnait ton code (surtout au niveau de la boucle).
    Je voudrais ajouter un "System.out.println" pour afficher le résultat (voir si je pourrais quand même utiliser ce code) mais je ne sait pas quoi mettre.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    a non, c'est bon, j'ai ajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static String readFile (String theFileName) {
    		System.out.println(" "+readFile(theFileName, Charset.defaultCharset()));
    		return readFile(theFileName, Charset.defaultCharset());
    	}
    et sa me retourne bien ce que le fichier contient.

    En revanche je ne comprend pas comment intervient le chemin d'accès...
    Le "Charset.defaultCharset()" contient "windows-1252".

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par varfendell Voir le message
    Je dispose dont d'un fichier test.txt qui comporte plusieurs ligne, et je voudrais les mettre toutes sur une seul ligne dans un variable. C'est pourquoi j'ai porté mon choix sur une variable de type String.
    Ben mon code aussi renvoi une String.
    Par contre pour la construire j'utilise une StringBuilder qui est fait pour cela.
    Lorsque tu utilises += sur une String tu génère un grand nombre d'objet temporaire, ce qui peut vite utiliser énormément de mémoire même pour de petit fichier...

    Citation Envoyé par varfendell Voir le message
    Je n'ai pas très bien comprise comment fonctionnait ton code (surtout au niveau de la boucle).
    La boucle lit autant de caractères que possible depuis le fichier et les mets dans le buffer cbuf. Ces caractères sont ensuite stocker dans le StringBuilder et on continue la lecture...

    Citation Envoyé par varfendell Voir le message
    En revanche je ne comprend pas comment intervient le chemin d'accès...
    Le "Charset.defaultCharset()" contient "windows-1252".
    Le Charset sert à définir l'encodage à utilisé pour lire le fichier, et non pas le chemin d'accès.

    Pour le chemin d'accès tu dois tout simplement utiliser "theFileName"...


    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ne pas avoir son nom associé à son nom de domaine
    Par mapmip dans le forum Webmarketing
    Réponses: 6
    Dernier message: 18/11/2013, 11h14
  2. Réponses: 2
    Dernier message: 09/10/2007, 02h08
  3. assigner/recuperer le contenu d'un fichier texte
    Par Lorenzo77 dans le forum Delphi
    Réponses: 6
    Dernier message: 22/05/2006, 10h54
  4. Réponses: 12
    Dernier message: 03/06/2004, 20h21
  5. [VB6] [Réseau] Récupérer la taille d'un fichier avec inet
    Par pcpunch dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 20/02/2003, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo