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

AWT/Swing Java Discussion :

[sauvegarde fichier] gérer l'emplacement des fichier sauvés!


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut [sauvegarde fichier] gérer l'emplacement des fichier sauvés!
    Bonjour à toutes et tous!

    Comment peut-on faire pour gérer l'emplacement des fichiers que l'on souhaites sauvegarder?
    J'ai créé une fonction d'enregistrement de fichier d'objet avce mon extension personnel. Tout marche pour le mieux mais maintenant je souhaiterais pour proposer une alternative avec un sous menu enregistrer sous:
    - chaque fichier aura un nom propre.
    - chaque fichier aura un emplacement choisi.

    Je n'arrive pas à trouver comment faire apparaitre une fenêtre de style enregistrement sous (que l'on trouve dans tous les logiciels quasiment...) et pouvoir ainsi choisir l'emplacement de mon fichier. Sinon il est créé et enregistré à la racine de mon programme...

    Merci d'avance!
    PS: J'ai cherché un tuto qui pourrais traiter du sujet mais sans succès...

  2. #2
    Membre du Club Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    regarde du côté de javax.swing.JFileChooser dans la JavaDoc. (...et showSaveDialog...)
    Je pense que ça correspond à ce que tu cherches.
    ++
    Philobedo

  3. #3
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    yes!! merci c'est exactement çà!!
    Et à tout hazard saurais-tu comment on gère ensuite l'ouverture ou l'enregistrement... parce que j'affiche les JFileChooser dans ActionPerformed()
    Merci d'avance!-

  4. #4
    Membre actif Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Points : 227
    Points
    227
    Par défaut
    sauvegarde --> showSaveDialog()
    ouvrir --------> showOpenDialog()

  5. #5
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Yes merci! mais je souhaietrais savoir comment on gère ensuite les interactions:
    -Lorsqu'on clic sur un fichier à ouvrir comment le récupérer?
    -Comment définir une extension spécifique à ouvrir?
    Ce genre de chose... j'ai rien trouvé de compréhensible pour le moment....

    Mais c'est vrai que ma dernière question était très maml formulé.... dsl!

  6. #6
    Membre du Club Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Je comprends pas trop ce que tu entends par ouverture ou enregistrement mais je vais essayé de t'aider...
    Pour ouvrir tu fais ton JFileChooser avec la méthode showOpenDialog idem pour enregistrer mais avec showSaveDialog.
    Quand tu as créé ta boite de dialogue tu fais un if pour détecter l'action de l'utilisateur (s'il clique sur "Ouvrir/Enregistrer" ou sur "Annuler"..) avec JFileChooser.APPROVE_OPTION...
    Puis ensuite tu rediriges vers ta propre fonction d'édition/enregistrement. En clair si tu créé un JFileChooser pour ouvrir des fichiers tu mets une méthode qui te permets d'ouvrir des fichiers (tu peux créer une nouvelle Frame avec un menu et JTextArea pour afficher le texte) et quand tu veux enregistrer tu renvoi vers une méthode d'écriture de fichier. Dans les deux cas c'est à toi de créer ces méthodes... Petite info tu récupère le nom du fichier sélectionner avec la méthode getSelectedFile
    En gros pour ouvrir ça doit donner un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     REPERTOIRE = System.getProperty("user.dir");
    	File inputFile;
    	JFileChooser j=new JFileChooser(REPERTOIRE);
    	int returnVal=j.showOpenDialog(this);
    	if (returnVal==JFileChooser.APPROVE_OPTION)
    	{
    		inputFile=j.getSelectedFile();
    
                     //ta méthode de lecture...
    	}
    Et pour enregistrer:
    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
    JFileChooser j=new JFileChooser(REPERTOIRE);
    	int returnVal=j.showSaveDialog(this);
    	if (returnVal==JFileChooser.APPROVE_OPTION)
    	{
    		outputFile=j.getSelectedFile();
    		if (outputFile.exists()) {
    			int retour = JOptionPane.showConfirmDialog(this,
    		        "Un fichier \""+outputFile+"\" existe déjà.\n" +
    			"Voulez-vous vraiment l'écraser?\n",
    			"Confirmation d'enregistrement",
    				JOptionPane.YES_NO_CANCEL_OPTION);
    			if (retour == JOptionPane.OK_OPTION) {
    				//ta méthode d'écriture
    			}
    		} 
                    else {
                             //ta méthode d'écriture...
                   }
    Pour créer tes méthode de lecture/écriture de fichier je te renvoi vers la FAQ:
    http://java.developpez.com/faq/java/...ngage_fichiers

  7. #7
    Membre du Club Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    j'avais pas vu ton dernier message...
    Pour faire un filtre sur les fichiers à afficher va voir le lien sur la FAQ
    => http://java.developpez.com/faq/java/?page=jfilechooser

  8. #8
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Je te remercie beaucoup c'est exactement ce dont j'avais besoin!!
    Le temps que je regarde tout ça et je te dirais si mon truc fonctionne!!!
    En tout cas merci beaucoup à tous!!!!

  9. #9
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Personnellement j'y suis jamais arrivé à spécifier de fichiers types à ouvrir : à chaque fois que je détermine un type, le saveFileDialog() l'ignore totalement et affiche tous les types présents : de si j'enregistre comme çà, aucune extension n'est donnée, c'est bizarre... Mais apparemment il est dit dans la doc que la déclaration d'extensions peut être ignorée :
    extensions - A list of default extensions to show in the file chooser. For example, String[] { "txt", "java" }. These might be ignored by the JNLP Client
    Voilà comment je détermine le type de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    FileSaveService fss;
    FileContents newfc;
    try {
    	newfc = fss.saveFileDialog(".", new String[]{"jpg"}, bais, "Picture.jpg");
    } catch (Exception e) {
    	e.printStackTrace();
    }
    Si quelqu'un voit une faute dans l'utilisation...

    [EDIT] Désolé, réponse vraiment à la bourre...

  10. #10
    Membre du Club Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    En utilisant la méthode setFileFilter de la classe JFileChooser ça fonctionne trés bien, en tout cas c'est comme ça que j'ai fait...
    => http://javasearch.developpez.com/j2s...ser.FileFilter)

  11. #11
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Effectivement, avec un JFileChooser çà à l'air de fonctionner.

    Mais mon application fonctionnait sur Internet et donc j'étais obligé de passer par un saveFileDialog : j'ai toujours pas compris comment le forcer à afficher des extensions par défaut...

    Je vais essayer de faire un post pour çà, parce que çà me trotte cette histoire !

  12. #12
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Le JFileChooser fonctionne à merveille!!
    Le FileFilter aussi!!

    Le petit hic c'est que je n'arrive toujours pas à récupérer les informations de cette fenêtre (nom du fichier et son emplacement ) en gros il l'enregistre toujours au même endroit...

    Les méthodes de récupération de ces champs sont dans JFileChooser ou je dois modifier ma classe de sérialisation?

  13. #13
    Membre du Club Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 66
    Points
    66
    Par défaut
    Pour récupérer le nom de ton fichier tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File outputFile = tonJFileChooser.getSelectedFile();
    Puis tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String repertoire = outputFile.getAbsolutePath();
    Pour récupérer le répertoire dans lequel se trouve ton fichier.

    Voilou si ça ne fonctionne pas, je vois pas trop quoi faire...
    ++
    Philobedo

  14. #14
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Je vais tester ça!
    En tout cas un grand merci au moins pour tout ce que tu m'as apporté...

  15. #15
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Bon alors voilà! j'ai essayer tout plein de truc... mais je m'y perd! je n'arrive toujours pas à changer la destination de mon fichier.... et je ne suis même pas sûr qu'il soit enregistré correctement!!!

    je vous montre mes méthodes utilisé:

    -Dans ma classe flux j'ai:
    class flux {


    private ObjectOutputStream ofW;
    private ObjectInputStream ofR;
    private Hashtable h= function.Dic_pays;
    private char mode;
    private String DEFAULT_FILENAME = "gère ville.cys";

    //----------------------------------------------------------------------------
    // FONCTION OUVRIR FICHIER
    //----------------------------------------------------------------------------
    public void ouvrir(String nom_fichier, String type) throws FileNotFoundException, IOException{

    mode = (type.toUpperCase()).charAt(0);

    if (mode == 'R' || mode == 'L'){
    ofR = new ObjectInputStream(new FileInputStream (nom_fichier));
    }

    else if (mode == 'W' || mode == 'E'){
    ofW = new ObjectOutputStream(new FileOutputStream(nom_fichier));
    }

    }

    //----------------------------------------------------------------------------
    // FONCTION ECRIRE DANS FICHIER
    //----------------------------------------------------------------------------

    public void ecrire() throws IOException{


    if (h != null)
    ofW.writeObject(h);

    }

    //----------------------------------------------------------------------------
    // FONCTION LIRE DANS FICHIER
    //----------------------------------------------------------------------------
    public Hashtable lire() throws ClassNotFoundException, IOException{

    Hashtable dico2 = (Hashtable) ofR.readObject();
    return dico2;
    }

    //----------------------------------------------------------------------------
    // FERMETURE DE FLUX
    //----------------------------------------------------------------------------

    public void fermer() throws IOException{

    if (mode == 'R' || mode == 'L')
    ofR.close();

    else if (mode == 'W' || mode == 'E')
    ofW.close();

    }
    }


    J'ai ensuite fait des fonctions pour utiliser tout ceci dans une autre classe où là j'ai beaucoup d'autre méthode mais je ne vous mets que l'essentiel:

    package gère_ville_final;

    import java.util.*;
    import javax.swing.JOptionPane;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.filechooser.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;



    class function{

    private static flux fichier_ville= new flux();

    //------------------------------------------------------------------------------
    // FICHIER de SERIALISATION
    //------------------------------------------------------------------------------


    //Sauvegarder
    //------------------------------------------------------------------------------
    public static void sauvegarder_sous(String nom, String mode){


    fichier_ville = new flux();

    try {
    fichier_ville.ouvrir(nom, mode);
    }
    catch (FileNotFoundException ex){
    JOptionPane.showMessageDialog(null, "Erreur d'ouverture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    }
    catch (IOException ex) {
    JOptionPane.showMessageDialog(null, "Erreur d'ouverture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    }

    try {
    fichier_ville.ecrire();

    }
    catch (IOException ex1) {
    JOptionPane.showMessageDialog(null, "Erreur d'écriture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    }

    try {
    fichier_ville.fermer();
    }
    catch (IOException ex) {
    JOptionPane.showMessageDialog(null, "Erreur de fermeture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    }


    }

    //Lister
    //------------------------------------------------------------------------------
    public static Hashtable lister(String nom, String mode){

    try {
    fichier_ville.ouvrir(nom, mode);
    }
    catch (FileNotFoundException ex){
    JOptionPane.showMessageDialog(null, "Erreur d'ouverture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    }
    catch (IOException ex) {
    JOptionPane.showMessageDialog(null, "Erreur d'ouverture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    }




    try {
    return fichier_ville.lire();
    }
    catch (NullPointerException ex){
    JOptionPane.showMessageDialog(null, "Erreur fichier vide", "ERREUR", JOptionPane.ERROR_MESSAGE);
    return null;
    }
    catch (IOException ex) {
    JOptionPane.showMessageDialog(null, "Erreur de lecture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    return null;
    }
    catch (ClassNotFoundException ex) {
    JOptionPane.showMessageDialog(null, "Erreur de lecture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    return null;
    }

    }


    public static void close(){
    try {
    fichier_ville.fermer();
    }
    catch (IOException ex) {
    JOptionPane.showMessageDialog(null, "Erreur de fermeture fichier", "ERREUR", JOptionPane.ERROR_MESSAGE);
    }
    }

    Et enfin je me sert de tout ceci dans ma méthode actionPerformed qui se trouve dans une classe fenetre (là encore je ne vous mets que se dont je me sert à ce moment):


    //----------------------------------------------------------------------------
    // SAUVEGARDE ET OUVERTURE
    //-------------------------------------------------------------------------

    package gère_ville_final;

    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.filechooser.*;

    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.regex.*;
    import java.io.File;



    class fenetre extends JFrame implements ActionListener, KeyListener {
    /*

    constructeur fenêtre etc...
    */
    public void actionPerformed (ActionEvent Ev){

    else if (Ev.getSource() == sauvegarderS){// sauvegardeS correspond à mon menuItem
    enregistrer_sous.addChoosableFileFilter(extension);
    enregistrer_sous.setFileFilter(extension);
    // enregistrer_sous.setFileSelectionMode(FILES_AND_DIRECTORIES);
    int returnval1 = enregistrer_sous.showSaveDialog(this);

    if (returnval1 == JFileChooser.APPROVE_OPTION){
    File outputFile = enregistrer_sous.getSelectedFile();

    function.sauvegarder_sous(outputFile.getName(), "Ecriture");
    }
    }

    else if (Ev.getSource() == ouvrir){

    ouverture.addChoosableFileFilter(extension);
    ouverture.setFileFilter(extension);
    ouverture.showOpenDialog(this);

    this.setContentPane(getContainer(6));
    }
    }

    Enfin voilà! ça à l'air d'enregistrer mais ça plante à l'ouverture et j'ai du mal à comprendre comment fonctionne les showOpenDialog et showSaveDialog....

    Si quelqu'un connais un bon tuto pour faire ceci je suis preneur!!

    merci d'avance!

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

Discussions similaires

  1. gérer l'acces à des fichiers : read only / write ..
    Par ryoussef19 dans le forum Visual C++
    Réponses: 21
    Dernier message: 09/08/2007, 15h39
  2. gérer l'acces à des fichiers : read only
    Par ryoussef19 dans le forum C#
    Réponses: 19
    Dernier message: 05/07/2007, 13h30
  3. windev peut gérer et executer des fichiers ksh
    Par popov2 dans le forum WinDev
    Réponses: 2
    Dernier message: 06/02/2007, 12h24
  4. [log4j] emplacement des fichiers .log
    Par danyboy85 dans le forum Logging
    Réponses: 7
    Dernier message: 18/01/2007, 07h47
  5. Réponses: 5
    Dernier message: 15/09/2006, 14h26

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