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 :

[File][JFileChooser]Ajouter une extension pour "Save as


Sujet :

AWT/Swing Java

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut [File][JFileChooser]Ajouter une extension pour "Save as
    Bonjour à tous.

    Je suis en train d'implenter une fonction "Save as..." sur mon logiciel, et quand le JFileChooser s'ouvre, je laisse à l'utilisateur le choix de choisir entre plusieurs type de fichiers (.xml, .txt...).

    J'aimerais bien que l'utilisateur ne soit pas obligé de mettre une extension au nom qu'il a choisit, quand il chercher à enregistrer son fichier.
    En gros, si il choisit le format ".xml" et qu'il tape le nom "monFichier", je voudrais lui enregistrer son fichier sous le nom "monFichier.xml".
    Or, une fois que j'ai récupèré mon fichier depuis le JFileChooser (.getSelectedFile())
    je ne peux plus modifier son nom.

    Voici mon code, si quelqu'un y voit une erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    			exptFile=exportFileChooser.getSelectedFile();
     
    			String fileName = new String(exptFile.getAbsolutePath()+cff.getExtension());
    			System.out.println("fileName "+fileName);
    			File tempFile = new File(fileName);
    			File tempFile2 = new File(fileName.concat(".coucou"));
    			if(!tempFile.renameTo(tempFile2))
    				System.out.println("renameTo qui ne marche pas !!!");
    			System.out.println("tempFile.getAbsolutePath "+tempFile.getAbsolutePath());
    			System.out.println("tempFile2.getAbsolutePath "+tempFile2.getAbsolutePath());
    			System.out.println("exptFile.getAbsolutePath "+exptFile.getAbsolutePath());
    			if(!exptFile.renameTo(tempFile)
    Avec ce genre de déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File exptFile=null; JFileChooser exportFileChooser;
    et cff une extension de FileFilter.

    Dans mon code ci-dessus, tempFile2 N'est PAS renommé. Il a donc le même nom que tempFile auquel est ajouté l'extension ".coucou".
    De même, quand j'essaie de renommer le fichier qui m'interresse vraiment (exptFile), ça ne marche pas...
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    renameTo() permet de renommer un fichier qui existe sur le disque dur. Pourquoi ne pas simplement faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    exptFile=exportFileChooser.getSelectedFile(); 
    if (!exptFile.endsWith(".xml")) {
      exptFile += ".xml";
    }
    Et c'est tout !
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Ben parceque je me choppe une petite erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The operator += is undefined for the argument type(s) File, String
    Laisse moi deviner, j'aurais dû préciser que je suis sous Java 1.4.2_06, n'est-ce pas ?

    PS: L'erreur m'est annoncée par Eclipse 3.1 mon EDI.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Non rien a voir avec Java 1.4 (file vite sous 1.5 gredin !). C'est moi qui me suis trompe. Donc on recommence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String selectedFile = exportFileChooser.getSelectedFile().getAbsolutePath();
    if (!selectedFile.endsWith(".xml")) {
      selectedFile+= ".xml";
    }
    exptFile = new File(selectedFile);
    Romain Guy
    Android - Mon livre - Mon blog

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Juste un détail : je te conseille juste d'ajouter un toLowerCase() dans la condition afin de ne pas rajouter une extension si elle est en majuscule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String selectedFile = exportFileChooser.getSelectedFile().getAbsolutePath();
    if (!selectedFile.toLowerCase().endsWith(".xml")) {
      selectedFile+= ".xml";
    }
    exptFile = new File(selectedFile);
    a++

  6. #6
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par Gfx
    file vite sous 1.5 gredin !
    Diantre, j'aimerais bien, par contre ça va pas être facile à faire accepter au client. (En fait je dis ça alors que c'est complètement impossible... leur déploiement est un brin long. J'avais déjà fait le code en 1.5, et j'ai été obligé de faire marche arrière ! J'espère qu'il feront l'effort de migrer, dans quelques mois, sur la 1.6 )

    Bon sinon pour le code, c'est super !

    Merci beaucoup à vous deux.

    En fait, mon problème c'est que je récupérais mon fichier avant de le renommer. Cela dit, si vous avez une minute (m'enfin il y en a peut-être qui veulent dormir ) je veux bien que vous m'expliquiez pourquoi le renameTo ne marche pas dans mon cas (n i pour le fichier à sauver, ni même pour les deux fichiers temporaires que je créais en test.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  7. #7
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Et dire qu'on planche deja sur la 1.7 nous

    Faire un new File(...) ne cree pas le fichier sur disque dur, le renameTo() ne peut donc pas marcher. File() peut representer un fichier physique mais aussi virtuel.
    Romain Guy
    Android - Mon livre - Mon blog

  8. #8
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    J'y pensais... Il m'aurait donc fallu, je suppose, utiliser File.createFile(...) ?
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  9. #9
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    File.createNewFile() plus precisement, mais la tu risques d'ecraser un fichier de l'utilisateur s'il a le meme nom. Il vaut mieux se contenter de manipuler des chaines de caracteres et de creer le fichier a la fin (s'il n'existe pas deja .
    Romain Guy
    Android - Mon livre - Mon blog

  10. #10
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Exact. Comme quoi, il ne faut pas que je dise des choses de tête.... j'ai pas une bonne tête !

    Par contre, tu fais bien de me dire ça, car ça me fait penser qu'il faut que je test si le fichier n'existe pasa déjà, quand je lui ajoute une extension...

    Merci beaucoup.

    Je pofine mon code, et je le resoumets...
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  11. #11
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Voilà, je crois que mon code c'est un peu embelli.

    En tout cas, il marche comme je le veux !
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    	if (tmsFile == null) {	
    		//Get selected input file and create window for it.
    		int returnVal = exportFileChooser.showSaveDialog(this);
    		if (returnVal != JFileChooser.APPROVE_OPTION) return null;
     
    		//Retreive file types allowed for the export function
    		FileFilter[] fileFilters = exportFileChooser.getChoosableFileFilters();
     
    		//Retrieve file name typed in by the user, in order to verify that it has a correct extension
    		String selectedFile = exportFileChooser.getSelectedFile().getAbsolutePath();
    		String[] extensions = new String[fileFilters.length-1];	//Save allowed extension for further display
    		int nbExt = 0;
    		boolean hasExtension=false;
    		//Check, if the file name is one of the file type allowed, making comparison between extensions. 
    		for&#40;int i=0;i<fileFilters.length && !hasExtension && selectedFile!=null;i++&#41;&#123;
    			//Do not compare extension with the "All file" filter.
    			if&#40;!fileFilters&#91;i&#93;.equals&#40;exportFileChooser.getAcceptAllFileFilter&#40;&#41;&#41;&#41;&#123;
    				extensions&#91;nbExt++&#93;=&#40;&#40;CommonFileFilter&#41;fileFilters&#91;i&#93;&#41;.getExtension&#40;&#41;;
    				if&#40;selectedFile.toLowerCase&#40;&#41;.endsWith&#40;&#40;&#40;CommonFileFilter&#41;fileFilters&#91;i&#93;&#41;.getExtension&#40;&#41;&#41;&#41;
    					hasExtension=true;
    			&#125;
    		&#125;
     
    		//If the file does not have the correct extension, or has no extension...
    		if &#40;!hasExtension&#41; &#123;
    			//...add the one defined by the filter type selected.
    			if&#40;!exportFileChooser.getFileFilter&#40;&#41;.equals&#40;exportFileChooser.getAcceptAllFileFilter&#40;&#41;&#41;&#41;&#123;
    				CommonFileFilter cff = &#40;CommonFileFilter&#41;exportFileChooser.getFileFilter&#40;&#41;;
    				selectedFile+= cff.getExtension&#40;&#41;;
    			&#125;else&#123;
    				//If the filter selected is "All files", then inform that the user
    				//have to enter an extension.
    				StringBuffer allowedExtensions=new StringBuffer&#40;extensions&#91;0&#93;&#41;;
    				for&#40;int i=1; i<extensions.length;i++&#41;&#123;
    					allowedExtensions.append&#40;" or "+extensions&#91;i&#93;&#41;;
    				&#125;
     
    				JOptionPane.showMessageDialog&#40;
    						this,
    						"MySoft could not proceed with EXPORT...."
    							+ "\nPlease make sure that the file name ends with"
    							+ allowedExtensions,
    						"Notice", JOptionPane.ERROR_MESSAGE&#41;;
    					return null;
    			&#125;
    		&#125;
    		exptFile = new File&#40;selectedFile&#41;;
     
    		//Check if the file does not already exist
    		File parentFile = exptFile.getParentFile&#40;&#41;;	//Work directory
    		File&#91;&#93; otherFiles = null;							//List all the files of the work directory
     
    		boolean alreadyExist = false;
    		boolean overwriteIt = true;
     
    		if&#40;parentFile!=null&#41;&#123; 
    			otherFiles = parentFile.listFiles&#40;&#41;;	//Retrieve the list of all files contained into the work directory
     
    			for&#40;int i=0;i<otherFiles.length && !alreadyExist;i++&#41;&#123;
    				//If the file already exist in the work directory,
    				//ask the user if he wants to overwrite or not the file.
    				if&#40;otherFiles&#91;i&#93;.equals&#40;exptFile&#41;&#41;&#123;
    					int chosen = JOptionPane.showOptionDialog&#40;null, 
    							"The file "+exptFile.getName&#40;&#41;+" already exists."+
    							"\nAre you sure you want to overwrite it?",
    							"File already exists", 
    							JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
    							null, null, null&#41;;
     
    					switch&#40;chosen&#41; &#123;
    						case JOptionPane.YES_OPTION&#58;
    							overwriteIt=true;
    							break;	
     
    						case JOptionPane.NO_OPTION&#58;
    							overwriteIt=false;
    							break;
     
    						case JOptionPane.CLOSED_OPTION&#58;
    							overwriteIt=false;
    							break;
    					&#125;
     
    					alreadyExist=true;
    				&#125;
    			&#125;
    		&#125;
     
    		//Exit the export function if the user does not want to overwrite
    		//the file, or if it is impossible to create the file.
    		if &#40;exptFile == null || !overwriteIt&#41; return null;
    	&#125;
    et après bien sûr, je fais mon traitement habituel, avec remplissage du fichier...

    Une fois de plus, Merci beaucoup.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

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

Discussions similaires

  1. QGIS : lenteur pour afficher les listes des vues dans &quot;Ajouter une table PostGIS&quot;
    Par fafa63 dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 11/07/2014, 19h04
  2. Ajouter une librairie pour php sur un Serveur dédié
    Par tchoumak dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 28/06/2006, 22h22
  3. Recherche d'une extension pour afficher du code Java
    Par Elmilouse dans le forum Mise en forme
    Réponses: 2
    Dernier message: 28/05/2006, 09h08
  4. Ajouter une clé pour une session non ouverte
    Par prgasp77 dans le forum Windows
    Réponses: 4
    Dernier message: 29/10/2005, 00h26
  5. creer une extension pour exchange
    Par simoryl dans le forum C++
    Réponses: 2
    Dernier message: 23/03/2005, 11h47

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