2012-09-20 3 views
4

Le code suivant fonctionne correctement lors du renvoi d'un fichier sur un Mac car il ajoute automatiquement l'extension de fichier au nom du fichier.JavaFX FileChooser ne retourne pas l'extension de fichier pour Windows

Sous Windows, cependant, je dois taper l'extension du fichier dans le nom du fichier afin qu'il revienne avec cette extension .... même si l'extension est sélectionnée dans le menu déroulant "Enregistrer le type sous" menu.

est-il un moyen d'ajouter automatiquement l'extension au nom lors du renvoi d'un fichier à partir du filechooser sur Windows?

FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter(fileExtension.toUpperCase()+" files(*."+fileExtension+")", "*."+fileExtension); 
       fileChooser.getExtensionFilters().add(extFilter); 

       //Show save file dialog 
       final File file = fileChooser.showSaveDialog(MyStage.this); 
+0

affiché comme bug sur https://javafx-jira.kenai.com/browse/RT-30048 –

Répondre

2

J'ai rencontré le même problème. Ma solution consistait à créer un nouveau fichier et à ajouter l'extension de fichier sous la forme d'une chaîne dans le constructeur de fichier. Si vous voulez que les utilisateurs puissent sélectionner et écraser un fichier existant, assurez-vous et ajoutez une vérification pour vous assurer que le fichier de sauvegarde initial ne contient pas l'extension particulière avant l'ajout, sinon vous obtiendrez quelque chose comme "test". .xls.xls ".

FileChooser fc = new FileChooser(); 
    FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("XLS File (*.xls)", "*.xls"); 

    fc.getExtensionFilters().add(extFilter); 

    File save = fc.showSaveDialog(stage); 

    save = new File(save.getAbsolutePath()+".xls"); 

    FileOutputStream fileOut = new FileOutputStream(save); 
+0

Qu'advient-il si l'utilisateur a déjà tapé « .xls » dans le nom de fichier? L'extension sera-t-elle doublée? – ceklock

+1

Oui, il va doubler l'extension. Pour éviter cela, ajoutez l'extension dans un bloc d'instruction if comme: if (! Save.getPath(). ToLowerCase(). EndsWith (".xls") { save = nouveau Fichier (save.getPath() + ". xls "); } –

+1

Cela ne fonctionnera pas complètement correctement non plus - parce que le sélecteur de fichier ne parvient pas à effectuer la vérification d'écrasement appropriée en premier dans ce cas - de sorte qu'un utilisateur écrase par inadvertance un fichier dont il ne voulait pas. pour vérifier que le fichier n'existe pas (si vous l'avez renommé) puis invite l'utilisateur .... c'est une douleur - https://javafx-jira.kenai.com/browse/RT-31956 – user2163960