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 :

Lire un fichier texte et remplir dynamiquement un tableau de String avec


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 22
    Points
    22
    Par défaut Lire un fichier texte et remplir dynamiquement un tableau de String avec
    Bonjour,

    Je cherche à remplir un tableau avec le contenu d'un fichier.

    Voici ce que j'ai présentement comme code (qui ne marche pas, mais je ne dois pas être très loin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      ArrayList<String> monArrayList = new ArrayList<String>(); // je ne connais pas la taille de fichier texte (volontairement), donc j'ai penché pour une ArrayList
     
      InputStream is = new FileInputStream("monfichier.txt");
      Reader tmpReader = new InputStreamReader(is, "utf-8");
      BufferedReader reader = new BufferedReader(tmpReader);
      try {
            for(String line = reader.readLine(); line != null; line = reader.readLine()) {
                monArrayList.add(line); //ici je veux ajouter le contenu lu ligne par ligne a mon array
            }
            return monArrayList;
                   System.out.println(monArrayList); // ici je veux contrôler que mon array a bien été chargé
      } finally {
            reader.close();
      }
    Le problème est que j'obtiens des exceptions. J'aimerais charger cet Array au chargement de mon programme, afin de pouvoir faire des opérations dessus (dans le constructeur, pas dans le main).

    J'ai déjà parcouru pas mal de forums mais je n'arrive pas trouver un exemple qui marche. C'est sans doute très basique, mais ca fait un bail que je n'ai pas pratiqué le Java et je galère dessus.

    Pour info j'ai la version 1.8.

    Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?

    Je vous remercie d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quelles exceptions ça pourrait te lancer ? Là, en l'état, ça ne compile pas : on ne peut pas mettre de code après un return (sauf dans un bloc finally, si le return est dans le bloc try de celui-ci), donc la ligne System.out.println(monArrayList); // ici je veux controler que mon array a bien ete charge doit être mise avant le return.

    Ensuite, il faut penser à fermer tous les flux, dans toutes les conditions. Si InputStream is = new FileInputStream("monfichier.txt"); et l'une des 2 lignes suivantes échouent, le flux sur le fichier ne sera pas fermé. Tu peux avantageusement utiliser la structure try-with-resources pour simplifier cet aspect.

    Enfin, on peut créer plus simplement un BufferedReader, par Files.newBufferedReader()), et encore plus facilement lire un fichier texte ligne à ligne, par Files.readAllLines().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Merci Joel pour ta réponse rapide.

    Ok je vais chercher des exemples avec le Files.readAllLines(), je ne connaissais pas cette astuce.

    [edit]
    Alors voici ou j'en suis,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try{
          Path filePath = new File("monfichier.txt").toPath();
         Charset charset = Charset.defaultCharset();        
         List<String> stringList = Files.readAllLines(filePath, charset);
         String[] stringArray = stringList.toArray(new String[]{});
          System.out.println(stringArray);
    }catch (Exception e){
    	System.out.println(e.toString());
    }
    System.out.println("Chargement du fichier monfichier.txt termine !");

    mais ca me lance une exception que je ne comprends pas:
    java.lang.String:@1bc2616

    Quelqu'un pour m'aider? Je ne dois vraiment plus etre loin

    Merci d'avance pour votre aide

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Ce n'est pas une exception. C'est tout a fait normal.

    C'est ta ligne qui t'affiche ton tableau de string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(stringArray);
    Tu dois simplement mettre une boucle autour de la ligne d'affichage pour qu'il affiche chaque ligne, un peu de cette manière par exemple :


    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
    try
    {
    	Path filePath = new File("e:\\conversiontramemetre2.csv").toPath();
    	Charset charset = Charset.defaultCharset();
    	List<String> stringList = Files.readAllLines(filePath, charset);
    	//String[] stringArray = stringList.toArray(new String[]{});
    	for (int i = 0; i < stringList.size(); i++)
    	{
    		System.out.println(stringList.get(i));
    	}
     
    } catch (Exception e)
    {
            e.printStackTrace();
    	System.out.println(e.toString());
    }
    System.out.println("Chargement du fichier monfichier.txt termine !");
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Merci Wax78

    Comment puis-je copier le contenu de ma List dans un Array de String que j'aurais declaré plus haut dans mon programme ?
    J'ai essayé mais ça ne passe pas.

    Merci d'avance.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par grisby007 Voir le message
    Comment puis copier le contenu de ma List dans un Array de Strings que j'aurais declaré plus haut dans mon programme?
    Jai essaye mais ca ne passe pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] stringArray = stringList.toArray( new String[stringList.size()] );
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] stringArray = stringList.toArray( new String[stringList.size()] );

    Merci Joel, mais ca ne fonctionne pas. En effet cela me genere des java.lang.String: @1bc216.

    Ce que je souhaite - mais n'ai pas encore reussi a faire - c'est avoir une variable globale (List ou Arraylist ou Array de String) qu'on va appeler "recup" qui aille recuperer ce que stringlist a chargé depuis le fichier texte.

    donc:

    1/ recup= vide ou "" ou null etc...

    2.1/ chargement du fichier texte dans stringList.
    2.2/copie de stringList dans recup
    destruction de stringlist (plus besoin)

    3/ on travaille avec les valeurs copiees dans recup


    C'est la partie 2.2 que je n'arrive pas a faire.
    Si vous pouviez m'aider ce serait vraiment top, parce que la du coup je bloque.

    Merci d'avance pour votre aide

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Citation Envoyé par grisby007 Voir le message
    Merci Joel, mais ca ne fonctionne pas. En effet cela me genere des java.lang.String: @1bc216.
    Exactement comme pour les post du dessus ou je t'ai déjà repondu.

    Tu essayes d'afficher les objet de ta liste (ou array ou ce que tu veux) alors qu'en fait tu affiches l'"addresse" de la liste et non chaque element de son contenu...

    Donc en gros, tu gardes ce qui a été dit et tu modifie pour avoir ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Path filePath = new File("e:\\conversiontramemetre2.csv").toPath();
    Charset charset = Charset.defaultCharset();
    List<String> stringList = Files.readAllLines(filePath, charset);
    String[] stringArray = stringList.toArray(new String[]{});
    for (int i = 0; i < stringArray.length; i++)
    {
    	System.out.println(stringArray[i]);
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    ok merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/12/2005, 15h57
  2. [Applet] lire un fichier texte
    Par lebesnec dans le forum Applets
    Réponses: 2
    Dernier message: 07/07/2005, 10h09
  3. Réponses: 1
    Dernier message: 24/11/2004, 16h54
  4. [Fichier] Lire un fichier texte long
    Par _Eric_ dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 18/08/2004, 15h22
  5. Réponses: 2
    Dernier message: 26/05/2004, 17h53

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