前言

JFileChooser这个是Java Swing提供的文件选择框,通过这个,我们可以浏览文件,目录等。使用起来不是很难,记录一下。

使用

1.打开选择框

fileChooser.showOpenDialog(null);
fileChooser.showSaveDialog(null);
这两个都是打开一个选择框,区别就是一个确认按钮是打开,另一个确认按钮是保存
简单示例:

JFileChooser fileChooser = new JFileChooser();
fileChooser.showOpenDialog(null);

效果如图:

java 文件选择对象 java swing选择文件_System

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);
	}

效果如图

java 文件选择对象 java swing选择文件_文件选择_02

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());
		}
	}

效果如图:

java 文件选择对象 java swing选择文件_java_03

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());
		}
	}

效果如图:

java 文件选择对象 java swing选择文件_文件选择_04

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()));
		}
	}

最后

最近有用到这个,所以做一下总结,不到位的地方,大家多多包涵。