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 :

File chooser/Ecrire dans un fichier texte


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut File chooser/Ecrire dans un fichier texte
    Bonjour les amis, j'ai un petit problème.
    je dois créer un programme qui génèrera un fichier d'importation pour un autre programme.
    J'ai alors essayé quelque chose :
    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
     
    public class FileChooser_APPROVE_SELECTION {
     
      public static void main(String[] argv) throws Exception {
        final Etudiant[] ecrireInfoEtudiant = new Etudiant[3];
        Etudiant[] lireInfoEtudiant = new Etudiant[3];
        ecrireInfoEtudiant[0] = new Etudiant("Laurent", "Surny", "B");
        ecrireInfoEtudiant[1] = new Etudiant("Salima", "Hassimi", "A");
        ecrireInfoEtudiant[2] = new Etudiant("Marie", "Dufour", "B+");
     
        MyFileChooser chooser = new MyFileChooser();
        chooser.setDialogType(JFileChooser.SAVE_DIALOG);
        final JDialog dialog = chooser.createDialog(null);
        chooser.addActionListener(new AbstractAction() {
          public void actionPerformed(ActionEvent evt) {
            JFileChooser chooser = (JFileChooser) evt.getSource();
            if (JFileChooser.APPROVE_SELECTION.equals(evt.getActionCommand())) {
            	//Sélection du chemin avec ajout de l'extension txt
            	File  fichier = new File(chooser.getSelectedFile()+".txt");
            	try {
            		//Création du nouveau fichier
    				fichier.createNewFile();
    				PrintWriter sortie = new PrintWriter(new BufferedWriter(new FileWriter(fichier)));
     
    				for(int y = 0;y < 3;y++){
    					sortie.println(ecrireInfoEtudiant[y]);
    				}sortie.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();}
              dialog.setVisible(false);
            } else if (JFileChooser.CANCEL_SELECTION.equals(evt.getActionCommand())) {
              dialog.setVisible(false); }} });
     
        dialog.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            dialog.setVisible(false); } });
        dialog.setVisible(true);
      }}
    class MyFileChooser extends JFileChooser {
      public JDialog createDialog(Component parent) throws HeadlessException {
        return super.createDialog(parent);
      }}
    class Etudiant implements Serializable{
    		String prenomEtudiant, nomEtudiant, noteEtudiant;
     
    		public Etudiant(){
    			super();};
    		public Etudiant(String prenom,String nom,String note){
    			prenomEtudiant = prenom;
    			nomEtudiant = nom;
    			noteEtudiant = note;}}
    Le fichier texte est crée, mais le contenu est illisible :
    FileChooser.Etudiant@811c88
    FileChooser.Etudiant@785d65
    FileChooser.Etudiant@3bc257
    Aidez-moi s'il vous plaît.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Au choix :
    -soit tu fais une meilleure écriture des données (donnée intéressante par donnée intéressantes)
    -soit tu redéfinis la méthode toString() pour ta classe Etudiant (vu que c'est elle qui est appelée ici, puisque tu demandes une représentation texte de ta classe)
    -soit tu t'intéresses à la sérialisation de données, mais je ne sais pas si ce point t'ira vu l'exemple donné.

    A part ça :
    • la convention en Java est d'utiliser le UpperCamelCase pour les noms de classe, pas de underscore
    • ta variable locale "lireInfoEtudiant" n'est jamais utilisée
    • tu ignores le retour de la méthode "createNewFile", donc tu écris potentiellement dans un fichier non créé
    • tu demandes de choisir un fichier, mais tu rajoutes TOUJOURS l'extension .txt, donc si l'utilisateur choisi un fichier déjà existant, tu en créeras un nouveau avec comme nom (par exemple) mesEtudiants.txt.txt au lieu d'écraser le précédent.
    • préfère un bloc try/finally pour la fermeture des ressources
    • tu ne fais que cacher le fileChooser au lieu de le fermer
    • en cas d'exception, pareil
    • tu as vraiment besoin de la "HeadlessException" ? De ce que j'en lis de la doc, elle sera lancée si l'environnement n'a pas de moniteur, de souris ou de clavier. Tu as vraiment besoin de ça ?
    • La classe Etudiant implémente Serializable mais ne défini pas de serialVersionUID
    • le constructeur sans argument de la classe Etudiant ne sers à rien. Il appel la classe mère, qui est Object ici, vu qu'elle n'étend aucune classe. C'est peut-être un besoin par contre de le garder, mais le super est inutile dans ce cas
    • je pense que c'est pour la démo, mais il faut éviter de mettre plusieurs classes dans un fichier


    Je crois que j'ai tout dit ^^'
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

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

  3. #3
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut
    Citation Envoyé par Hizin Voir le message
    [*]tu demandes de choisir un fichier, mais tu rajoutes TOUJOURS l'extension .txt, donc si l'utilisateur choisi un fichier déjà existant, tu en créeras un nouveau avec comme nom (par exemple) mesEtudiants.txt.txt au lieu d'écraser le précédent.
    Merci Hizin,
    Il arrive des fois que tu as des choses dans la tête, mais tu ne sais pas comment les matérialiser. En fait, je voudrais que l'utilisateur choisisse un nom de fichier. Si le fichier n'existe pas, il est crée dans le cas contraire alors il est écrasé mais avec l'extension txt.

    On coup de mais de ta part s'il te plaît !

    merci aussi d'avoir attirer mon attention sur le bloc try/finally pour la fermeture des ressources.

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Citation Envoyé par "The watcher
    Il arrive des fois que tu as des choses dans la tête, mais tu ne sais pas comment les matérialiser. En fait, je voudrais que l'utilisateur choisisse un nom de fichier. Si le fichier n'existe pas, il est crée dans le cas contraire alors il est écrasé mais avec l'extension txt.
    Je te déconseille de faire comme ça. Par exemple, je choisi win32.dll (exemple très con), win32.dll sera supprimé pour être remplacé par un win32.dll.txt :/ (et accessoirement, ton windows sera kapüt).
    Je te conseils plutôt de te renseigner sur ce qui s’utilise en duo avec le JFileChooser : un FileFilter.
    @see : http://java.developpez.com/faq/gui/?...ser#fileFilter

    En reprenant ton code, cela serait :

    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
     
    private void ecrireFichier(File fichier)
    	{
    		try {
    			//Création du nouveau fichier
    			fichier.createNewFile();
    			PrintWriter sortie = new PrintWriter(new BufferedWriter(new FileWriter(fichier)));
     
    			for(int y = 0;y < 3;y++){
    				sortie.println(ecrireInfoEtudiant[y]);
    			}sortie.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();}
    	}
    Dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (JFileChooser.APPROVE_SELECTION.equals(evt.getActionCommand()))
    :

    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
     
     
    File  fichier = new File(chooser.getSelectedFile()+".txt");
    				// si le fichier existe
    				if (fichier.exists())
    					{
    						// on demande si on doit l'écraser
    						if (JOptionPane.showConfirmDialog(
    													 null, "Le fichier existe déjà, voulez-vous le remplacer ?",
    													 "Fichier déjà existant", JOptionPane.YES_NO_OPTION
    													 ) == JOptionPane.YES_OPTION)
    							{
    								// on tente de le supprimer et agit en conséquence
    								if (fichier.delete())
    									ecrireFichier(fichier);
    								else
    									JOptionPane.showConfirmDialog(null, "Problème durant l'écrasement du fichier.");
    							}
    					}
    				else
    					{
    						ecrireFichier(fichier);
    					}
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

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

  5. #5
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut
    Ça marche nickel.

    Vraiment merci Hinzi. Cool

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

Discussions similaires

  1. lire/ecrire dans un fichier texte
    Par mello dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 13/06/2006, 12h35
  2. [VB.net]ecrire dans un fichier text
    Par grand_prophete dans le forum Windows Forms
    Réponses: 12
    Dernier message: 04/05/2006, 16h37
  3. Réponses: 6
    Dernier message: 17/12/2005, 19h27
  4. [VB.NET] Ecrire dans un fichier texte...
    Par robert.michel9 dans le forum VB.NET
    Réponses: 5
    Dernier message: 04/12/2005, 14h35
  5. Ecrire dans un fichier text en MFC
    Par soufienne dans le forum MFC
    Réponses: 6
    Dernier message: 05/10/2005, 16h54

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