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 formaté


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut Lire un fichier formaté
    Bonjour,

    J'essaye d'apprendre à maitriser le langage Java, j'ai donc commencer un petit truc simple, lire et écrire dans un fichier des infos "Client" (Nom, prénom, tel, etc...) le tout via une interface graphique (formulaire avec textfield, boutons encoder / lire )

    Pour écrire, pas de soucis, j'y arrive en formatant le texte de cette manière :
    0001;identifiant;nom;prenom;tel;mail
    0002;identifiant2;nom2;prenom2;tel2;mail2
    etc...

    Par contre, lire dans le fichier pour afficher dans le formulaire je bloque.
    J'arrive juste à afficher la première ligne, ça ne passe jamais à la suivant.

    Voici le code du bouton "Next" :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    private JButton getBtnNext() {
    		if (btnNext == null) {
    			btnNext = new JButton("Suivant");
    			btnNext.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					//Nous déclarons nos objets en dehors du bloc try/catch
    					File file = new File ("client.txt");
    					FileReader fr;	
    					int c;
    					String str="";
    					try {
    						//création de l'objet
    						fr = new FileReader(file);
    						//on lit les données
    						while ((c = fr.read()) != 59){
    							str += (char)c;
    						}
    						textField_Matricule.setText(str);
    						str="";
    						while ((c = fr.read()) != 59){
    							str += (char)c;
    						}
    						textField_Identifiant.setText(str);
    						str="";
    						while ((c = fr.read()) != 59){
    							str += (char)c;
    						}
    						textField_Nom.setText(str);
    						str="";
    						while ((c = fr.read()) != 59){
    							str += (char)c;
    						}
    						textField_Prenom.setText(str);
    						str="";
    						while ((c = fr.read()) != 59){
    							str += (char)c;
    						}
    						textField_Tel.setText(str);
    						str="";
    						while ((c = fr.read()) != 10){
    							str += (char)c;
    						}
    						textField_Mail.setText(str);
    					} catch (FileNotFoundException e1) {
    						e1.printStackTrace();
    					} catch (IOException e1) {
    						e1.printStackTrace();
    					}
    				}
    			});
    			btnNext.setBounds(177, 267, 89, 23);
    		}
    		return btnNext;
    	}

    Je tient juste à préciser que j'ai un niveau ultra débutant, et le seul autre langage informatique que je connait est le C.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 097
    Par défaut
    Salut,

    Tu pourrais simplifier ton code en lisant le fichier ligne par ligne, puis découper la ligne dans un tableau que tu px assigner ensuite a tes textfield si tu veux.

    Lire un fichier ligne par ligne en java.
    Fonction String.split(String) pour découper des chaines d e caractères.

    Ensuite dans ton exemple ci dessus, tu ouvres le fichier et lis la première ligne, et cela, à chaque appel. Donc évidement ca ne saute pas a l'enregistrement suivant.
    Pour cela il faut ouvrir le fichier et ne pas le fermer pour pouvoir se promener dedans et lire ce qu'il te faut.
    (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

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Merci pour votre aide !

    J'ai suivi vos conseils et effectivement le code est plus clair.

    Maintenant par contre j'ai le soucis inverse, il n'affiche que la dernière ligne. Je comprens pourquoi : en realité il m'affiche toute les ligne mais tellement rapidement que je ne vois que la dernière ligne.

    Je ne sais pas trop du coup comment régler ce problème.

    Peut être existe t'il une possibilité de mettre en pause la boucle while et la reprendre en cliquant sur suivant ?

    Voici le nouveau code du bouton "Next" :

    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
    28
    29
    30
    31
    32
    33
    	private JButton getBtnNext() {
    		if (btnNext == null) {
    			btnNext = new JButton("Suivant");
    			btnNext.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					String file = "client.txt";
    					Scanner sc;
    					try {
    						sc = new Scanner(new File(file));
     
    					while(sc.hasNextLine()){
    						String line = sc.nextLine();
     
    						String tab[] = line.split(";");
     
    						textField_Matricule.setText(tab[0]);
    						textField_Identifiant.setText(tab[1]);
    						textField_Nom.setText(tab[2]);
    						textField_Prenom.setText(tab[3]);
    						textField_Tel.setText(tab[4]);
    						textField_Mail.setText(tab[5]);
    					}
    					sc.close();
    					} catch (FileNotFoundException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    				}
    			});
    			btnNext.setBounds(177, 267, 89, 23);
    		}
    		return btnNext;
    	}

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Eh bien il faut créer autant de textFields que tu as de gens à afficher dedans.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 097
    Par défaut
    Ou utiliser une JTable, ou faire quelque chose du genre :

    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
    28
    29
    30
    31
    32
    33
    34
    private JButton getBtnNext() throws FileNotFoundException {
     
    		String file = "client.txt";
    		final Scanner sc = new Scanner(new File(file));
     
    		if (btnNext == null) {
    			btnNext = new JButton("Suivant");
    			btnNext.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					try {
    					if(sc.hasNextLine()){
    						String line = sc.nextLine();
    						String tab[] = line.split(";");
     
    						textField_Matricule.setText(tab[0]);
    						textField_Identifiant.setText(tab[1]);
    						textField_Nom.setText(tab[2]);
    						textField_Prenom.setText(tab[3]);
    						textField_Tel.setText(tab[4]);
    						textField_Mail.setText(tab[5]);
    					}
    					else
    						sc.close();
     
    					} catch (FileNotFoundException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    				}
    			});
    			btnNext.setBounds(177, 267, 89, 23);
    		}
    		return btnNext;
    	}
    Le problème est que pour faire "précédant" ca va poser des problème et il faut aussi gérer "la fin du fichier"...
    (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

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Citation Envoyé par Almenor
    Maintenant par contre j'ai le soucis inverse, il n'affiche que la dernière ligne.
    ça vient du fait qu'à chaque itération de la boucle while, ça écrase le contenu des textfields.
    Citation Envoyé par Almenor
    Peut être existe t'il une possibilité de mettre en pause la boucle while et la reprendre en cliquant sur suivant ?
    Si tu veux utiliser des boutons "Précédent" , "Suivant", le mieux c'est d'utiliser LineNumberReader à la place du Scanner et de sauvegarder le numéro de ligne dans une variable.

    A+.

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 097
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Si tu veux utiliser des boutons "Précédent" , "Suivant", le mieux c'est d'utiliser LineNumberReader à la place du Scanner et de sauvegarder le numéro de ligne dans une variable..
    +1
    (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

Discussions similaires

  1. Problème pour lire des fichiers XML avec tFileInputXML- probleme format date
    Par rogermar dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 06/10/2010, 14h46
  2. Lire un fichier txt compressé au format gzip
    Par pascalbout1 dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2007, 10h28
  3. Lire un fichier texte pré-formaté
    Par taupinfada dans le forum C++
    Réponses: 7
    Dernier message: 31/03/2007, 11h41
  4. [debutant] lire un fichier formaté
    Par piteon dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 02/03/2007, 21h39
  5. Lire un fichier format dos
    Par Roma dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/05/2005, 17h37

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