Enregistrement d'un fichier [Résolu/Fermé]

Messages postés
23
Date d'inscription
lundi 30 juin 2003
Dernière intervention
26 mars 2007
- 2 août 2006 à 10:40 - Dernière réponse :
Messages postés
23
Date d'inscription
lundi 30 juin 2003
Dernière intervention
26 mars 2007
- 3 août 2006 à 17:26
Bonjour,

J'ai une appli avec une JFrame qui contient une JTextArea. Je voudrais enregistrer le texte contenu dans la JTextArea, mais plusieurs problèmes s'opposent à moi :

- J'utilise la méthode JFileChooser.showSaveDialog(getParent);
Mais je ne sais pas comment préciser à mon output stream que le nom du fichier est celui qui est saisi dans la SaveDialog.

- Par ailleurs, je ne sais pas comment procéder pour que mon output stream contienne le texte de ma JTextArea. Faut-il utiliser un InputStream pour lire ce qu'il y a dedans ?

Voila le code que j'utilise pour le moment, mais qui ne fonctionne pas ... :S:(

            JFileChooser chooser = new JFileChooser("C:\");
            int returnVal = chooser.showSaveDialog(getParent());
            if(returnVal == JFileChooser.APPROVE_OPTION)
            {
                FileReader fr = null;
                try
                {
                    fr = new FileReader(new File(txtArea.getText()));
                    BufferedReader buffRead = new BufferedReader(fr);
                    String ligne;
                    StringBuffer contenu = new StringBuffer();
                   
                    while ((ligne = buffRead.readLine()) != null)
                    {
                        //System.out.print(ligne);
                        contenu.append(ligne);
                        contenu.append("\r\n");
                    }
                   
                    buffRead.close();
                    fr.close();
                   
                    FileWriter fw = new FileWriter(new File("plop.txt"));
                    BufferedWriter buffWrite = new BufferedWriter(fw);
                    buffWrite.write(contenu.toString());
                    buffWrite.flush();
                    buffWrite.close();
                    fw.close();
                } catch (FileNotFoundException fnfe)
                {
                    fnfe.printStackTrace();
                } catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
            }

Kouikoui
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
5293
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
19 novembre 2018
- 2 août 2006 à 20:10
3
Merci
Salut,

bon pour que tu comprennes bie ce que j'ai voulu dire :

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Test extends JFrame implements ActionListener{
    private static final long serialVersionUID = -1570645570118871214L;
    private JButton           btSave           = null;
    private JButton           btClose          = null;
    private JTextArea       area               = null;
   
    public Test(){       
        JPanel contentPane = (JPanel)getContentPane();
        contentPane.setLayout(new GridBagLayout());
       
        GridBagConstraints gridBagArea = new GridBagConstraints();
        gridBagArea.fill = GridBagConstraints.BOTH;
        gridBagArea.gridx = 0;
        gridBagArea.gridy = 0;
        gridBagArea.insets = new Insets(10, 10, 10, 10);
       
        GridBagConstraints gridBagSave = new GridBagConstraints();
        gridBagSave.gridx = 0;
        gridBagSave.gridy = 1;
        gridBagSave.insets = new Insets(0, -100, 10, 0);
       
        GridBagConstraints gridBagClose = new GridBagConstraints();
        gridBagClose.gridx = 0;
        gridBagClose.gridy = 1;
        gridBagClose.insets = new Insets(0, 100, 10, 0);
       
        JScrollPane sp = new JScrollPane(getArea());
        sp.setPreferredSize(new Dimension(250, 250));
       
        contentPane.add(sp, gridBagArea);
        contentPane.add(getBtSave(), gridBagSave);
        contentPane.add(getBtClose(), gridBagClose);
       
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
       
    }
   
    private JButton getBtSave(){
        if(btSave == null){
            btSave = new JButton();
            btSave.setText("Sauvegarder");
            btSave.addActionListener(this);
        }
        return btSave;
    }
   
    private JButton getBtClose(){
        if(btClose == null){
            btClose = new JButton();
            btClose.setText("Quitter");
            btClose.addActionListener(this);
        }
        return btClose;
    }
   
    private JTextArea getArea(){
        if(area == null){
            area = new JTextArea();
            area.setText("");
            area.setWrapStyleWord(true);
            area.setLineWrap(true);
        }
        return area;
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(getBtClose())){
            dispose();
        }else if(e.getSource().equals(getBtSave())){
            JFileChooser chooser = new JFileChooser(File.listRoots()[0]);
            //dans ce cas il faut mettre soit meme le nom du fichier ou le recup autrement
            //chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            int ret = chooser.showSaveDialog(this);
            if(ret == JFileChooser.APPROVE_OPTION){
                //recuperation du fichier selectionné (tu peux aussi mettre un fichier qui n'existe pas)
                File f = chooser.getSelectedFile();
                if(!f.canWrite()){//petit test pour eviter les exceptions
                    JOptionPane.showMessageDialog(this,
                            "<html>Impossible d'&eacute;crire ici !!!</html>",
                            "Erreur", JOptionPane.ERROR_MESSAGE);
                    return;
                }
                try {
                    FileWriter fw = new FileWriter(chooser.getSelectedFile());
                    fw.write(getArea().getText());//ecriture du texte
                    fw.flush();
                    fw.close();
                } catch (Exception ioe) {
                    ioe.printStackTrace();
                }
            }
        }
    }
   
    public static void main(String [] args){
        new Test().setVisible(true);
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA

Merci Twinuts 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Twinuts
Messages postés
5293
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
19 novembre 2018
- 2 août 2006 à 14:33
0
Merci
Salut,


1 - Pourquoi faire du java qui est portable si c'est pour faire new JFileChooser("C:\");???


2 - pour recupe le fichier selectionné par un JFileChooser dans le
returnVal == JFileChooser.APPROVE_OPTION il faut faire
chooser.getSelectedFile();

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
Messages postés
23
Date d'inscription
lundi 30 juin 2003
Dernière intervention
26 mars 2007
- 2 août 2006 à 16:08
0
Merci
Salut,

J'ai effectivement retiré le "C:\" dans le constructeur du JFileChooser ...
J'avourai ne pas avoir fait attention à la portabilité de mon code qui ne sera utilisé que sur Windows...

Pour le reste, je savais comment récupérer le fichier sélectionné, là n'était pas le problème ...

Il me faut enregistrer dans un fichier texte, les données contenues dans ma JTextArea.

Voila,
Merci pour ton aide.

Kouikoui
Commenter la réponse de cs_Kouikoui
Messages postés
5293
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
19 novembre 2018
- 2 août 2006 à 16:20
0
Merci
Salut,


 si tu ne veux pas de portabilitée aucun interet de faire du java
et d'ajouter la lourdeur et contrainte d'une jvm à ton appli le mieux
encore c'est de faire dans le .Net enfin c'est mon avis.


pour ton prob tu peux simplement faire :


FileWriter fw = new FileWriter(new File("plop.txt"), append);

fw.write(txtArea.getText());

fw.flush();

fw.close();

d'ailleur je ne comprend pas pourquoi tu fais :

fr = new FileReader(new File(txtArea.getText()));

txtArea.getText() c'est le nom et (ou) chemin d'un fichier ou de la data pure et dure?


pour info favorise System.getProperty("line.separator"); plutot que "\r\n"

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
Messages postés
23
Date d'inscription
lundi 30 juin 2003
Dernière intervention
26 mars 2007
- 2 août 2006 à 17:55
0
Merci
J'ai modifié mon code pour obtenir ca :

            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showSaveDialog(getParent());
            if(returnVal == JFileChooser.APPROVE_OPTION)
            {
                try
                {
                    FileWriter fw = new FileWriter(new File("RapportTest.txt"));
                    fw.write(txtContentDirectory.getText());
                    fw.flush();
                    fw.close();
                } catch (FileNotFoundException fnfe)
                {
                    fnfe.printStackTrace();
                } catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
            }

Mais je n'arrive toujours pas au résultat escompté ... :(

Ma SaveDialog s'ouvre, me demande de spécifier un endroit et un nom de fichier.
Comment faire pour que ce soit pris en compte quand je valide ?

Par ailleurs, ma txtArea.getText(); c'est de la data ...
Il n'y a pas de chemin de fichier dedans, slmt du texte a moi.

Merci pour l'info ;)
Et merci pour ton aide !!

Kouikoui
Commenter la réponse de cs_Kouikoui
Messages postés
23
Date d'inscription
lundi 30 juin 2003
Dernière intervention
26 mars 2007
- 3 août 2006 à 17:26
0
Merci
Ca marche !!
Tout va mieux.

Merci encore.
:)

Kouikoui
Commenter la réponse de cs_Kouikoui

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.