Enregistrement d'un fichier

Résolu
cs_Kouikoui Messages postés 23 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 26 mars 2007 - 2 août 2006 à 10:40
cs_Kouikoui Messages postés 23 Date d'inscription lundi 30 juin 2003 Statut Membre 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

6 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 août 2006 à 20:10
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
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 août 2006 à 14:33
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
0
cs_Kouikoui Messages postés 23 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 26 mars 2007
2 août 2006 à 16:08
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 août 2006 à 16:20
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kouikoui Messages postés 23 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 26 mars 2007
2 août 2006 à 17:55
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
0
cs_Kouikoui Messages postés 23 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 26 mars 2007
3 août 2006 à 17:26
Ca marche !!
Tout va mieux.

Merci encore.
:)

Kouikoui
0
Rejoignez-nous