1. 程式人生 > >JavaFX FileChooser文件選擇器,緩存上一次打開的目錄

JavaFX FileChooser文件選擇器,緩存上一次打開的目錄

exist htm tor 知識點 exce tac init ane ioe

例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 }

JavaFX FileChooser文件選擇器,緩存上一次打開的目錄