例1:點擊按鈕Choose File打開文件選擇器,並打開指定的目錄。這是通過final void setInitialDirectory(final File value)方法實現的。
1 import java.io.File; 2 3 import javafx.application.Application; 4 import javafx.event.ActionEvent; 5 import javafx.event.EventHandler; 6 import javafx.geometry.Insets; 7 import javafx.geometry.Pos; 8 import javafx.scene.Scene; 9 import javafx.scene.control.Button; 10 import javafx.scene.layout.GridPane; 11 import javafx.stage.FileChooser; 12 import javafx.stage.FileChooser.ExtensionFilter; 13 import javafx.stage.Stage; 14 15 public class Main extends Application { 16 17 public static void main(String[] args) { 18 launch(args); 19 } 20 21 @Override 22 public void start(Stage primaryStage) throws Exception { 23 // Create a pane to hold a button 24 GridPane pane = new GridPane(); 25 pane.setStyle("-fx-border-color: green;"); 26 pane.setAlignment(Pos.CENTER); 27 pane.setPadding(new Insets(10, 10, 10, 10)); 28 pane.setHgap(10); 29 pane.setVgap(10); 30 31 // Create a button to choose a file 32 Button btChooseFile = new Button("Choose File"); 33 pane.add(btChooseFile, 0, 0); 34 35 // Set the primary stage properties 36 primaryStage.setScene(new Scene(pane, 400, 200)); 37 primaryStage.setTitle("Starting..."); 38 primaryStage.setResizable(false); 39 primaryStage.show(); 40 41 // 42 btChooseFile.setOnAction(new EventHandler<ActionEvent>() { 43 @Override 44 public void handle(ActionEvent event) { 45 FileChooser fileChooser = new FileChooser(); 46 fileChooser.setTitle("Choose File"); 47 fileChooser.setInitialDirectory(new File("J:" + File.separator + "PrtSc" + File.separator + "20190321")); 48 fileChooser.getExtensionFilters().addAll(new ExtensionFilter("Text Files", "*.txt"), new ExtensionFilter("All Files", "*.*")); 49 File file = fileChooser.showOpenDialog(primaryStage); 50 if (file != null) { 51 System.out.println(file.getAbsolutePath()); 52 } 53 } 54 }); 55 } 56 }
UI:
例2:增加一個緩存文件,用於記錄上一次選中的目錄。
工程結構:
第62行的代碼,涉及到的知識點:Java - byte[] 和 String互相轉換,
1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 9 import javafx.application.Application; 10 import javafx.event.ActionEvent; 11 import javafx.event.EventHandler; 12 import javafx.geometry.Insets; 13 import javafx.geometry.Pos; 14 import javafx.scene.Scene; 15 import javafx.scene.control.Button; 16 import javafx.scene.layout.GridPane; 17 import javafx.stage.FileChooser; 18 import javafx.stage.FileChooser.ExtensionFilter; 19 import javafx.stage.Stage; 20 21 public class Main extends Application { 22 23 public static void main(String[] args) { 24 launch(args); 25 } 26 27 @Override 28 public void start(Stage primaryStage) throws Exception { 29 // Create a pane to hold a button 30 GridPane pane = new GridPane(); 31 pane.setStyle("-fx-border-color: green;"); 32 pane.setAlignment(Pos.CENTER); 33 pane.setPadding(new Insets(10, 10, 10, 10)); 34 pane.setHgap(10); 35 pane.setVgap(10); 36 37 // Create a button to choose a file 38 Button btChooseFile = new Button("Choose File"); 39 pane.add(btChooseFile, 0, 0); 40 41 // Set the primary stage properties 42 primaryStage.setScene(new Scene(pane, 400, 200)); 43 primaryStage.setTitle("Starting..."); 44 primaryStage.setResizable(false); 45 primaryStage.show(); 46 47 // 48 btChooseFile.setOnAction(new EventHandler<ActionEvent>() { 49 @Override 50 public void handle(ActionEvent event) { 51 FileChooser fileChooser = new FileChooser(); 52 fileChooser.setTitle("Choose File"); 53 fileChooser.getExtensionFilters().addAll(new ExtensionFilter("All Files", "*.*")); 54 // 55 File cacheFile = new File("cache.txt"); 56 if (cacheFile.exists()) { 57 try (InputStream inputStream = new FileInputStream(cacheFile)) { 58 byte[] bytes = new byte[(int) cacheFile.length()]; 59 // Read the contents of the cache.txt 60 inputStream.read(bytes); 61 // 62 File directory = new File(new String(bytes)); 63 if (directory.exists()) { 64 fileChooser.setInitialDirectory(directory); 65 } 66 } catch (FileNotFoundException e) { 67 e.printStackTrace(); 68 } catch (IOException e1) { 69 e1.printStackTrace(); 70 } 71 } 72 // 73 File file = fileChooser.showOpenDialog(primaryStage); 74 if (file != null) { 75 // Store the directory to the cache.txt 76 try (OutputStream outputStream = new FileOutputStream(cacheFile)) { 77 byte[] bytes = file.getParent().getBytes(); 78 outputStream.write(bytes); 79 } catch (FileNotFoundException e) { 80 e.printStackTrace(); 81 } catch (IOException e) { 82 e.printStackTrace(); 83 } 84 } 85 } 86 }); 87 } 88 }