2015-09-24 3 views
1

Dans mon projet, j'utilise JavaFX FileChooser pour permettre à l'utilisateur d'enregistrer des fichiers. J'ai remarqué un bogue, où un fichier avec un filtre de fichier spécifié serait toujours enregistré en tant que fichier .txt sur les systèmes Linux. D'un autre thread de stackoverflow je me suis penché que contrairement à Windows, sur Linux le fileChooser.showSaveDialog(); retourne un fichier sans l'extension de fichier choisie. Je suis confiant, que cette mise en œuvre irrégulière a une cause très évidente que je ne comprends pas. Mais je ne sais pas encore comment l'adapter à mes besoins. Je suis conscient qu'il existe d'autres threads résolus sur un sujet similaire, mais toutes les solutions sont basées sur l'extraction de l'extension du fichier retourné, où dans mon cas il n'y a pas d'extension retournée par showSaveDialog.JavaFX FileChooser Filefilter ne renvoyant pas l'extension

Répondre

1

Voici un exemple qui ajoute une extension si l'utilisateur n'a pas de type un à l'aide de leur filtre sélectionné:

@Override 
public void start(Stage primaryStage) { 
    Button btn = new Button(); 
    btn.setText("Save to file."); 
    btn.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      FileChooser fc = new FileChooser(); 
      FileChooser.ExtensionFilter xmlfilter = new FileChooser.ExtensionFilter("XML", "*.xml"); 
      FileChooser.ExtensionFilter mffilter = new FileChooser.ExtensionFilter("mf", "*.mf"); 
      fc.getExtensionFilters().addAll(xmlfilter,mffilter); 
      fc.setSelectedExtensionFilter(xmlfilter); 
      File f = fc.showSaveDialog(primaryStage.getOwner()); 
      System.out.println("f = " + f); 
      if(null == f) { 
       return; 
      } 
      final String selected_description = fc.getSelectedExtensionFilter().getDescription(); 
      System.out.println("selected_description = " + selected_description);   
      if(selected_description.equals(xmlfilter.getDescription()) && !f.getName().endsWith(".xml")) { 
       f = new File(f.getParent(),f.getName()+".xml"); 
      } else if(selected_description.equals(mffilter.getDescription()) && !f.getName().endsWith(".mf")) { 
       f = new File(f.getParent(),f.getName()+".mf"); 
      } 
      System.out.println("f = " + f); 
     } 
    }); 

    StackPane root = new StackPane(); 
    root.getChildren().add(btn); 

    Scene scene = new Scene(root, 300, 250); 

    primaryStage.setTitle("Example"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

Je l'ai testé sur Linux et n'a jamais vu cela ajouter un fichier .txt. Un filtre d'extension donné peut avoir plusieurs extensions, vous devrez donc en choisir une à ajouter arbitrairement.

+0

Excuses. J'aurais dû découvrir getSelectedExtensionFilter() par moi-même. Je revenais directement le fichier de showSaveDialog() sans penser à utiliser l'objet pour rassembler plus d'informations. Mais bien que ce soit une réponse appropriée à ma question, le problème de la sauvegarde des fichiers demeure: Comment gérer les extensions en double; Comment demander en cas de dépassement. Je pense que je m'attendais juste à une solution simple donnée par FileChooser qui me manquait. Mais là encore, une réponse n'a jamais été simple. Mais de toute façon, merci pour la réponse :) – Haeri