JavaFX FileChooser文件选择器,缓存上一次打开的目录
例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文件选择器,缓存上一次打开的目录的更多相关文章
- JavaFX FileChooser文件选择器、DirectoryChooser目录选择器
参考:https://www.yiibai.com/javafx/javafx_filechooser.html 参考:https://blog.csdn.net/dorma_bin/article/ ...
- java:工具(汉语转拼音,压缩包,EXCEL,JFrame窗口和文件选择器,SFTP上传下载,FTP工具类,SSH)
1.汉语转拼音: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuP ...
- 框架基础:ajax设计方案(三)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组
马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...
- 高级组件——文件选择器JFileChooser
1.创建文件选择器 JFileChooser 2.设置选择模式 setFileSelectionMode(int mode) JFileChooser.FILES_ONLY 只能选择文件(默认) JF ...
- 前端通信:ajax设计方案(四)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组
马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...
- Java开发桌面程序学习(五)——文件选择器和目录选择器的使用
选择器的使用 DirectoryChooser目录选择器官方文档 FileChooser文件选择器官方文档 文件选择器的使用 JavaFx中有个FileChoser,可以打开一个对话框来选择文件 Fi ...
- java 图形化工具Swing 颜色文件选择器 ;JColorChooser;JFileChoose
使用JColorChooser: JColorChooser用于创建颜色选择器对话框,该类的用法非常简单,该类主要提供了如下两个静态方法: (1),showDialog(Component compo ...
- 关于更新发布CSS和JS文件的缓存问题
现如今,浏览器大战下,各个浏览器也是拼了命的提高性能,升级JS解析引擎,更好的处理浏览器的页面缓存,让用户的浏览体验更快,占用更小的PC资源.那么,问题就出现在JS和CSS缓存,甚至页面缓存上.至于浏 ...
- 细说ASP.NET Core静态文件的缓存方式
一.前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存.服务器缓存.CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的. 本文指在这三个方面,在ASP.NET ...
随机推荐
- Laravel Pipeline原理及使用
Laravel Pipeline原理及使用 开发中可能遇到非常冗长的逻辑,以至于我们想将针对性逻辑拆分出来,但是又拿不准该如何拆分才能实现较高的扩展性并保证较高的维护性,或者说不知道如何优雅的将待处理 ...
- java安全编码指南之:Mutability可变性
目录 简介 可变对象和不可变对象 创建mutable对象的拷贝 为mutable类创建copy方法 不要相信equals 不要直接暴露可修改的属性 public static fields应该被置位f ...
- 常用mac命令
~/.bash_profile 可以添加常用的一些命令别名alias unity="open -n /Applications/Unity/Unity.app"
- Java 中基本数据类型的变量的转换规则
基本数据类型之间的转换 变量之间的转换规则 布尔型变量在和其他 7 种基本数据类型做运算时,无法转化为其他的数据类型,所以下面所说的运算都是除了布尔型的其他 7 种基本数据类型之间的转换. 1.自动类 ...
- 非IT行业大企程序员讲述MIS系统开发案例
雪莉叹了一口气,调整了一下被汗水濡湿的刘海,然后向后靠在办公椅中,伸手在电脑键盘上输入了一些内容, 最后拿起印刷着房地产广告的扇子,边扇风边等待着. 她的工位在办公室的东侧角落,侧靠着窗.此时 ...
- Maven 仓库镜像设置
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>al ...
- Mybatis源码学习第七天(PageHelper分析)
其实我本来是不打算写这个PageHelper的,但是后来想了想,还是写了吧!现在市场用Mybatis的产品分页应该差不多都是用PageHelper来实现的,毕竟Mybatis的分页rowbound.. ...
- Kubernetes中资源清单与Pod的生命周期(二)
一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...
- Java审计之SQL注入篇
Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ...
- 洛谷 P4072 [SDOI2016]征途 斜率优化DP
洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...