前言
JFileChooser这个是Java Swing提供的文件选择框,通过这个,我们可以浏览文件,目录等。使用起来不是很难,记录一下。
使用
1.打开选择框
fileChooser.showOpenDialog(null);
fileChooser.showSaveDialog(null);
这两个都是打开一个选择框,区别就是一个确认按钮是打开,另一个确认按钮是保存
简单示例:
JFileChooser fileChooser = new JFileChooser();
fileChooser.showOpenDialog(null);
效果如图:
2.设置默认打开的路径为桌面
大家可以发现上图的路径我们不太想要,那么怎么修改打开的默认路径呢。
很简单JFileChooser fileChooser = new JFileChooser(),这个括号里面是可以传路径参数的,不妨传一个桌面路径进去看一下。
简单示例:
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory());
fileChooser.showOpenDialog(null);
当然也可以实例化的时候先不传参:
public static void main(String[] args) {
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(fsv.getHomeDirectory());
fileChooser.showOpenDialog(null);
}
效果如图
3.拿到选择的文件路径
那么怎么拿到选择文件的路径呢?
JFileChooser 的返回值,代表着不同的状态,例如:用户点了取消按钮或者打开/保存。
所以比较返回值即可,加入下面这两行,即可拿到当前状态:
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION)
加入下面这一行,即可拿到路径:
fileChooser.getSelectedFile().getAbsolutePath()
简单示例:
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory());
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION) {
System.out.println("path: " + fileChooser.getSelectedFile().getAbsolutePath());
}
4.如何选择文件夹?
上面我们是选择的文件,那么如何选择文件夹呢?
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
上面这行是JFileChooser 的选择类型样例:它的选择类型有基本的三种:文件、文件夹、文件和文件夹。
简单示例:
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory());
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION) {
System.out.println("path: " + fileChooser.getSelectedFile().getAbsolutePath());
}
5.如何过滤文件?
大家肯定会有这样的需求,我们选择文件在特定场景下通常是某一类的文件,我们可以只保留这一类文件,使体验更好。
写一个过滤器
FileNameExtensionFilter fileFilter = new FileNameExtensionFilter (“exe file”,“exe”);
添加这个过滤器
fileChooser.setFileFilter(fileFilter);
简单示例:
public static void main(String[] args) {
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory());
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter fileFilter = new FileNameExtensionFilter ("exe file","exe");
fileChooser.setFileFilter(fileFilter);
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION) {
System.out.println("path: " + fileChooser.getSelectedFile().getAbsolutePath());
}
}
效果如图:
6.如何将页面修改为英文
很多公司都有这样的需求,或许是中文还不够国际化吧,总是要把软件写成全英文的!!!话不多说,这个该如何设置呢?
增加下面这一行:
JFileChooser.setDefaultLocale(Locale.US);
简单示例:
public static void main(String[] args) {
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser.setDefaultLocale(Locale.US);
JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory());
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter fileFilter = new FileNameExtensionFilter ("exe file","exe");
fileChooser.setFileFilter(fileFilter);
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION) {
System.out.println("path: " + fileChooser.getSelectedFile().getAbsolutePath());
}
}
效果如图:
7.如何浏览多个文件
有的时候需求可能要选择多个文件,那怎么搞?
加入下面这一行
fileChooser.setMultiSelectionEnabled(true);
简单示例:
public static void main(String[] args) {
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser.setDefaultLocale(Locale.US);
JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory());
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setMultiSelectionEnabled(true);
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION) {
System.out.println("path: " + Arrays.toString(fileChooser.getSelectedFiles()));
}
}
8.看所有文件这几个字不顺眼?
如何干掉“所有文件”这四个字?
加下面这一行:
fileChooser.removeChoosableFileFilter(fileChooser.getAcceptAllFileFilter());`
简单示例:
public static void main(String[] args) {
FileSystemView fsv = FileSystemView.getFileSystemView();
JFileChooser.setDefaultLocale(Locale.US);
JFileChooser fileChooser = new JFileChooser();
fileChooser.removeChoosableFileFilter(fileChooser.getAcceptAllFileFilter());
fileChooser.setCurrentDirectory(fsv.getHomeDirectory());
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION) {
System.out.println("path: " + fileChooser.getSelectedFile());
}
}
9.稍微修改一下
综合一下,增加注释。
public static void main(String[] args) {
// 拿到文件系统
FileSystemView fsv = FileSystemView.getFileSystemView();
// 设置过滤器
FileNameExtensionFilter fileNameExtensionFilter = new FileNameExtensionFilter("all","txt","exe");
// 修改为英文
JFileChooser.setDefaultLocale(Locale.US);
// 实例化
JFileChooser fileChooser = new JFileChooser();
// 设置当前工作目录为桌面
fileChooser.setCurrentDirectory(fsv.getHomeDirectory());
// 设置标头
fileChooser.setDialogTitle("select");
// 设置文件选择类型
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
// 设置多文件选择模式
fileChooser.setMultiSelectionEnabled(true);
// 移除所有文件过滤模式
fileChooser.removeChoosableFileFilter(fileChooser.getAcceptAllFileFilter());
// 添加文件过滤
fileChooser.setFileFilter(fileNameExtensionFilter);
// 拿到操作结果
int result = fileChooser.showOpenDialog(null);
// 判断操作结果
if(result == JFileChooser.APPROVE_OPTION) {
// 打印所选文件路径
System.out.println("path: " + Arrays.toString(fileChooser.getSelectedFiles()));
}
}
最后
最近有用到这个,所以做一下总结,不到位的地方,大家多多包涵。