Java Swing JFileChooser保存文件时根据选择的文件类型自动添加后缀名
最近做的一个聊天室的小项目,想保存聊天的日志文件,遇到了些问题,设置了文件类型过滤,填写文件名后不会自动加上后缀,以下为该问题的解决方案
首先、定义一个自己的文件扩展名过滤器 MyFileFilter:
import java.io.File; import javax.swing.filechooser.FileFilter; public class MyFileFilter extends FileFilter { String ends; // 文件后缀 String description; // 文件描述文字 public MyFileFilter(String ends, String description) { // 构造函数 this.ends = ends; // 设置文件后缀 this.description = description; // 设置文件描述文字 } @Override // 只显示符合扩展名的文件,目录全部显示 public boolean accept(File file) { if (file.isDirectory()) return true; String fileName = file.getName(); if (fileName.toUpperCase().endsWith(this.ends.toUpperCase())) return true; return false; } @Override // 返回这个扩展名过滤器的描述 public String getDescription() { return this.description; } // 返回这个扩展名过滤器的扩展名 public String getEnds() { return this.ends; } }
然后使用自己建的文件扩展名过滤器
JFileChooser fc=new JFileChooser(); fc.setDialogTitle("保存文件"); MyFileFilter txtFilter = new MyFileFilter(".txt", "txt 文件 (*.txt)"); fc.addChoosableFileFilter(txtFilter);
最后处理返回的文件对象
int fresult; fresult = fc.showSaveDialog(fc); if (fresult == JFileChooser.APPROVE_OPTION) { // 用户点击了“确定”按钮 File file = fc.getSelectedFile(); //获得文件名 // 获得被选中的过滤器 MyFileFilter filter = (MyFileFilter)fc.getFileFilter(); // 获得过滤器的扩展名 String ends = filter.getEnds(); File newFile = null; if (file.getAbsolutePath().toUpperCase().endsWith(ends.toUpperCase())) { // 如果文件是以选定扩展名结束的,则使用原名 newFile = file; System.out.println("路径:"+newFile.getAbsolutePath()); } else { // 否则加上选定的扩展名 newFile = new File(file.getAbsolutePath() + ends); System.out.println("路径:"+newFile.getAbsolutePath()); } //使用处理后的newFile文件对象
- 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《IT技术宅》。
- 本文网址:https://www.ilt.me/dmfx/50.html
- 上篇文章:Eclipse快捷键大全
- 下篇文章:Java Swing开发常用相关函数