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 ...
随机推荐
- vmware-workstation迁移虚拟机 15pro到12版本
最近将测试的几台虚拟机进行了迁移,有几个点要注意,分享一下 1.环境介绍: 源服务器-ip-172.16.96.x 目标服务器-ip-172.16.96.x VMware版本-VMwareworkst ...
- jinja2快速实现自定义的robotframework的测试报告
一.背景 RF的结果报告可以方便我们查看每一条用例集.用例的执行结果统计,但是有的项目涉及到一些数据的比对,希望能够直观到看到数据,原生的测试报告就无法满足这个需求了. 原生的报告 项目需求报告格式 ...
- javascript面试题(二)
24. function foo() { } var oldName = foo.name; foo.name = "bar"; [oldName, foo.name] // [f ...
- Agumater 增加基本数据上传下载能力
- Zookeeper协议篇-Paxos算法与ZAB协议
前言 可以自行去学习一下Zookeeper中的系统模型,节点特性,权限认证以及事件通知Watcher机制相关知识,本篇主要学习Zookeeper一致性算法和满足分布式协调的Zab协议 Paxos算法 ...
- js 向上滚屏
<!doctype html><html><head><meta charset="utf-8"><title>< ...
- JS语法_集合
数组方法 forEach // no-log Array.prototype.forEach_ = function (cb) { let len = this.length for (let i = ...
- xargs命令学习,于阮一峰博客
一.标准输入与管道命令 Unix 命令都带有参数,有些命令可以接受"标准输入"(stdin)作为参数. $ cat /etc/passwd | grep root 上面的代码使用了 ...
- Linux 【Shell脚本经典案例】
Shell 简介 hell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口 当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理 ...
- 被喷了!聊聊我开源的RPC框架那些事
前段时间利用业余时间写了一个简单的 RPC 框架,花费了不少精力.开源出来之后,少部分不太友好的技术人站在上帝视角说了风凉话.就很难受,兄弟,谁还没有一个玻璃心. 简单吐槽一波,给大家聊聊关于 gui ...