2015-09-24 1 views
1

В моем проекте я использую JavaFX FileChooser, чтобы пользователь мог сохранять файлы. Я заметил ошибку, где файл с указанным файловым фильтром всегда сохранялся как .txt в системах Linux. Из другого потока stackoverflow я наклонился, что в отличие от Windows, в Linux fileChooser.showSaveDialog(); возвращает файл без выбранного расширения файла. Я уверен, что эта нерегулярная реализация имеет очень очевидную причину, по которой я не понимаю. Но все же я не уверен, как адаптировать это для моих нужд.JavaFX FileChooser Filefilter не возвращает расширение

Я знаю, что есть некоторые другие разрешенные темы по подобной теме, но все решения основаны на извлечении расширения из возвращаемого файла, где в моем случае нет расширения, возвращаемого showSaveDialog.

ответ

1

Вот пример, который добавляет расширение, если пользователь не ввести его, используя свой выбранный фильтр:

@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(); 
} 

Я проверил это на Linux, и никогда не видел его добавить .txt. У данного фильтра расширения может быть несколько расширений, поэтому вам придется выбирать один, чтобы добавить произвольно.

+0

Извинения. Я должен был открыть это getSelectedExtensionFilter() самостоятельно. Я просто возвращал файл из showSaveDialog(), не думая об использовании объекта для сбора дополнительной информации. Но хотя это правильный ответ на мой вопрос, проблема сохранения файлов по-прежнему остается: как обрабатывать дубликаты расширений; Как запросить в случае переопределения. Я думаю, что я просто ожидал простого решения, уже предоставленного FileChooser, которое мне не хватало. Но опять же, ответ не был простым. Но в любом случае, спасибо за ответ :) – Haeri

Смежные вопросы