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 ...
随机推荐
- IMGUI
https://github.com/zwcloud/ImGui https://github.com/ocornut/imgui https://usingcpp.wordpress.com/201 ...
- 如何把一个一般的git库变成“裸库”?
语法: git clone --bare 「src」 「dest」 e.g. cd ~/Workspace/SourceRepo/ git clone --bare ./ ../Git/bareRep ...
- Python pymsql模块
pymsql pymysql这款第三方库可以帮助我们利用python语言与mysql进行链接 基本使用 首先要下载pymysql pip install pymsql 以下是pymysql的基本使用 ...
- 大厂运维必备技能:PB级数据仓库性能调优
摘要:众所周知,数据量大了之后,性能是大家关注的一点,所以我们在业务开发的时候,特别关注性能,做为一个架构师,必须对性能要了解,要懂.才能设计出高性能的业务系统. 一.GaussDB分布式架构 所谓集 ...
- 小程序开发-组件navigator导航篇
navigator 页面链接 navigator的open-type属性 可选值 navigate.redirect.switchTab,对应于wx.navigateTo.wx.redirectTo. ...
- 小程序开发-block组件的使用
微信小程序中,block不是一个组件,而是一个包装元素,不会在页面中做任何渲染. 使用情况:条件渲染 wx:if 因为 wx:if 是一个控制属性,需要将它添加到一个标签/组件上,用于控制隐藏与显示. ...
- 20190919-02安装Xshell和CRT远程工具 000 008
Linux远程登录及相关工具介绍 Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器.这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中 ...
- HTML5总结整理
(仅供大家学习分享交流) 一.简介 1.前端开发最核心技术 我们知道,用所谓的网页三剑客已经不能满足需求了,那前端开发究竟要学习什么技术呢?网页最 主要由3部分组成:结构.表现和行为.网页现在新的标准 ...
- html基础:基本标签
一.html简介 html是一个长的字符串,它能够被浏览器解析.html分为三块:html代码,css,js. html的注释可以用<!-- --> 或者ctrl+? html页面打开以后 ...
- 一文带你了解Sql优化
我们后台开发人员每天都难免与数据库打交道,那么你在写sql语句的时候有注重到自己sql的效率吗?当你sql查询速度很慢的时候你有想过是你的sql语句造成的吗?看完这篇文章,我相信你会对sql优化有了一 ...