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 ...
随机推荐
- LWPR
Scriptable Render Pipeline https://docs.unity3d.com/Manual/ScriptableRenderPipeline.html Unity轻量 ...
- JavaScript 究竟是怎样去执行的?
摘要: 理解 JS 引擎运行原理. 作者:前端小智 原文:搞懂 JavaScript 引擎运行原理 Fundebug经授权转载,版权归原作者所有. 一些名词 JS 引擎 — 一个读取代码并运行的引擎, ...
- The Unique MST(最小生成树的唯一性判断)
Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...
- Webpack 入门指迷
大概算是一份教程吧, 只不过效果肯定不如视频演示之类的好..Webpack 最近在英文社区上经常看到, 留了心, 但进一步了解是通过下边的视频:视频: How Instagram.com Works, ...
- Cypress系列(44)- 命令行运行 Cypress
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 前面也介绍过 Cypress 命令 ...
- nginx模块化结构
NGINX是一个免费.开源.高性能.轻量级的HTTP和反向代理服务器,也是一个电子邮件(IMAP/POP3)代理服务器 特点: 占有内存少,并发能力强 Nginx的优点: 模块化.事件驱动.异步.非阻 ...
- tomcat7升级到tomcat8注意事项
第一点:context.xml配置jndi的参数修改 maxActive 替换为 :maxTotal maxWait 替换为 :maxWaitMillis factory="org.ap ...
- PHP生成二维码 endroid/qr-code 扩展包
目录 1. 引入 endroid/qr-code 扩展包 2. 使用示例 3. 二维码中放入logo,无法识别二维码的问题 1. 引入 endroid/qr-code 扩展包 https://pack ...
- Kubernetes的资源控制器和Service(四)
一.定义和分类 1,定义 k8s 中内建了很多控制器(controller ),这些相当于一个状态机,用来控制 Pod 的具体状态和行为. 2,类型 ReplicationController.Rep ...
- Javaweb中的请求路径的相关总结
重定向和转发相对路径和绝对路径问题 注意:转发和重定向的URLString前有加 / 为绝对路径 反之为相对路径 1.假设通过表单请求指定的Url资源 action="LoginServ ...