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

Langage Java Discussion :

Lecture d'un fichier


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut Lecture d'un fichier
    Bonjour à toutes et à tous,

    Voici une question très bête... Je voudrais pouvoir lire le contenu d'un fichier txt. Jusque la tout va très bien. J'écris deux méthodes utilisées :
    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
     
    public static void afficheUn(String fichier) {
    		String ligne = "";
    		BufferedReader ficTexte;
    		try {
    			ficTexte = new BufferedReader(new FileReader(new File(fichier)));
    			while (null != (ligne = ficTexte.readLine()))
    				System.out.println(ligne);
    			System.out.println("\n");
    			ficTexte.close();
    		}
    		catch(Exception e) {
    			System.out.println(e);
    		}
    	}
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static void afficheDeux(String fichier) throws Exception {
    	     Scanner scanner = new Scanner(new FileReader(new File(fichier)));
    	     while (scanner.hasNextLine()) {
    	          System.out.println(scanner.nextLine());
    	     }
    	     scanner.close();
    	}
    Je cherche à lire le fichier "toto.txt" dont le contenu est ci-dessous. On remarquera en particulier les accents.
    copie de toto.txt
    till;(n);caisse (de supermarché)
    lonely;(adj);solitaire, isolé
    tight;(adj);étroit
    beyond;(prep);au-delà de
    beside;(prep);à côté de
    L'une ou l'autre des méthodes lis bien le fichier texte, mais m'écris dans la sortie standards les gros mots suivant :
    till;(n);caisse (de supermarch�)
    lonely;(adj);solitaire, isol�
    tight;(adj);�troit
    beyond;(prep);au-del� de
    beside;(prep);� c�t� de
    Avez vous une idée de comment gérer les accents ?

    Merci d'avance de vos réponses,

    Tolliob

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Indiquer le bon charset du fichier, apparemment ce n'est pas celui par défaut de ta plate-forme.

    Et si le fichier n'est pas trop gros, il vaut mieux utiliser Files.readAllLines() plutôt que ces vieux machins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(String line : Files.readAllLines(Paths.get(fichier), Charset.forName("windows-1252"))) {
      System.out.println(ligne);
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Indiquer le bon charset du fichier, apparemment ce n'est pas celui par défaut de ta plate-forme.

    Et si le fichier n'est pas trop gros, il vaut mieux utiliser Files.readAllLines() plutôt que ces vieux machins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(String line : Files.readAllLines(Path.get(fichier), Charset.forName("windows-1252"))) {
      System.out.println(ligne);
    }
    Merci Thelvin pour ta réponse !!!

    Je vais regarder les classes Files et Path. Il va me falloir installer Java 7, ce qui sous mac et Eclipse ne semble pas de tout repose d'après mes premiers essais...

    Je tiendrais la discussion au courant de mon avancée !

    Tolliob

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Je viens de tester ta proposition Thelvin :

    for(String line : Files.readAllLines(Path.get(fichier), Charset.forName("windows-1252"))) {
    System.out.println(line);
    }
    Je ne sais pas pourquoi, j'ai été obligé de la modifier légèrement en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Path path = FileSystems.getDefault().getPath(repertory, file);
    for(String line : Files.readAllLines(path, Charset.forName("UTF-8"))) {
    	System.out.println(line);
    Je ne pense pas avoir accès à Path.get(fichier). En même temps, j'ai eu un peu de mal à comprendre comment fonctionne l'interface Path...

    Sinon, autre question :

    Quels sont les avantages de cette méthode par rapport au deux que j'avais soumises en début de post ?

    Merci à tous,

    Tolliob

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par tolliob Voir le message
    Je ne sais pas pourquoi, j'ai été obligé de la modifier légèrement en :
    Effectivement, j'avais oublié un s dans Paths.get(fichier). En Java 7 les interfaces n'ont pas de méthode static, c'était donc absurde d'essayer avec l'interface Path sans s. J'ai corrigé mon post.

    Citation Envoyé par tolliob Voir le message
    Quels sont les avantages de cette méthode par rapport au deux que j'avais soumises en début de post ?
    ? Elle est juste plus simple.

    - Avec ta première méthode, tu dois te taper un FileInputStream, un InputStreamReader et un BufferedReader. Avec ta deuxième méthode juste un Scanner, et avec la mienne juste savoir que Files.readAllLines() existe (éventuellement on peut estimer qu'il a fallu construire le Path avec Paths.get(), mais en principe on l'avait déjà construit avant.)

    - Avec ta première méthode tu dois assigner une variable String à chaque boucle et vérifier si elle est pas null. Avec ta deuxième méthode tu dois boucler tant que scanner.jasNextLine(). Avec la mienne, on dit juste qu'on veut toutes les lignes et on fait un for-each sur ces lignes.

    ... C'est simplement le moins compliqué et le plus clair des trois.
    Le revers de la médaille, c'est que c'est aussi le moins flexible, puisque ça ne marche qu'avec les fichiers et que ça suppose que les fichiers sont pas trop gros et peuvent être chargés entièrement en mémoire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Merci pour ta réponse très clair !

    Tolliob

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 07/07/2004, 16h30
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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