`
61party
  • 浏览: 1106536 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

为 JFileChooser 添加选择文件有效验证功能

阅读更多

版权声明:转载时请务必保留以下作者信息和链接
作者:陈维(chenweionline@hotmail.com)作者的网站:http://www.chenwei.mobi

我们在做 GUI 编程的时候经常需要用到 JFileChooser 组件构造一个文件选择对话框来为用户提供打开文件、保存文件等操作。

通常的做法是调用 JFileChooser.showOpenDialog() 方法显示文件选择对话框并且选择一个文件后,点击【Approve】按钮(默认情况下标有 "Open" ),当对话框关闭后使用 JFileChooser.getSelectedFile() 方法得到选取的文件,然后再对被选取的文件有效性进行验证(例如,文件的文件名是否合法、选取的路径下是否已有同名文件存在等等),如果验证不通过,需要再次打开文件选择对话框进行选取。

显然,验证没有通过的情况下,文件选取对话框被反复的打开和关闭,影响用户体验。

我现在介绍一个方法,通过对 JFileChooser 进行一些改进,在点击了【Approve】按钮后,对话框关闭前对选取的文件进行有效性验证,如果验证没有通过,那么 JFileChooser 不会被关闭,而在其上会弹出一个警告对话框,关闭这个警告对话框后可以直接在 JFileChooser 进行下一次选择。

现在我们来实现这个特殊的文件选择对话框。

查看 JFileChooser 的 API,可以发现这样一个方法 public void approveSelection() 。这个方法会在用户确定选择操作时(例如单击【Approve】按钮)由 UI 调用,导致使用等于 APPROVE_SELECTION 的命令字符串激发一个操作事件。

那么,我们现在需要做的就是继承 JFileChooser 再覆写这个方法,将对选中文件的有效性验证写入这个方法中,只有当验证通过时才调用超类的 approveSelection() 完成文件选取,否则弹出警告对话框直接返回,继续选择新的文件。

下面的代码就是这个特殊文件选择对话框的实现

packagemobi.chenwei.wing.swing;

importjava.io.File;
importjavax.swing.JOptionPane;
importjavax.swing.filechooser.FileSystemView;
importmobi.chenwei.wing.swing.util.Utilities;

/***//**
*带文件有效验证的文件选择对话框。
*
*
@authorChenWei
*@websitewww.chenwei.mobi
*@emailchenweionline@hotmail.com
*/

publicclassJValidateFileChooserextendsjavax.swing.JFileChooser...{

publicJValidateFileChooser()...{
super();
}


publicJValidateFileChooser(FilecurrentDirectory)...{
super(currentDirectory);
}


publicJValidateFileChooser(FilecurrentDirectory,FileSystemViewfsv)...{
super(currentDirectory,fsv);
}


publicJValidateFileChooser(FileSystemViewfsv)...{
super(fsv);
}


publicJValidateFileChooser(StringcurrentDirectoryPath)...{
super(currentDirectoryPath);
}


publicJValidateFileChooser(StringcurrentDirectoryPath,FileSystemViewfsv)...{
super(currentDirectoryPath,fsv);
}


/***//**
*超类的这个方法会在用户确定选择操作时由UI调用,
*现在覆写这个方法在其中进行有效性验证。
*/

@Override
publicvoidapproveSelection()...{
Filefile
=getSelectedFile();

//验证文件名是否合法,合法文件名不能包含'','/',':','*','?','"','<','>','|'等字符。
if(!validateFileName(file.getName()))...{
JOptionPane.showMessageDialog(getParent(),
"Invalidfilenameorpath.","WARNING",JOptionPane.WARNING_MESSAGE);
return;
}


//检查选中的文件是否存在。
if(!file.exists())...{
JOptionPane.showMessageDialog(getParent(),
"Cannotfindtherequestedfile.","WARNING",JOptionPane.WARNING_MESSAGE);
return;
}


super.approveSelection();
}


privatebooleanvalidateFileName(Stringname)...{
if(name.indexOf('\')!=-1||name.indexOf('/')!=-1||
name.indexOf(
':')!=-1||name.indexOf('*')!=-1||
name.indexOf(
'?')!=-1||name.indexOf('"')!=-1||
name.indexOf(
'<')!=-1||name.indexOf('>')!=-1||
name.indexOf(
'|')!=-1)...{

returnfalse;
}
else...{
returntrue;
}

}


publicstaticvoidmain(String[]args)...{
JValidateFileChooserchooser
=newJValidateFileChooser();
chooser.showOpenDialog(
null);
}

}

程序运行截图:

分享到:
评论

相关推荐

    JFrame文件上传Java_swing应用

    3. **文件上传**:文件上传功能通常涉及到文件选择对话框(JFileChooser)和输入流(InputStream)处理。用户通过JFileChooser选择文件后,应用可以读取选定文件的路径,然后使用FileInputStream或其他输入流类读取...

    swing 模拟文件上传

    例如,使用HttpClient,我们可以创建一个POST请求,添加文件作为请求体: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://your-server/upload"...

    文件保存对话框的资源

    此外,还可以通过对话框回调函数处理用户的选择,比如验证文件名的有效性或在保存前进行预处理。 5. **应用场景** 文件保存对话框广泛应用于各种软件,如文本编辑器、图像处理软件、音频/视频编辑工具等,任何需要...

    java_j2se_read_image_upload.rar_swing 文件_swing文件上传

    在Java的Swing库中,实现文件上传功能主要涉及到用户界面的设计和文件I/O操作。Swing提供了丰富的组件和API,使得我们可以构建出交互式的图形用户界面,包括用于文件选择的JFileChooser组件。以下是关于使用Java ...

    java上传文件到服务器

    1. **选择文件**:在Java应用中,可以使用`JFileChooser`组件让用户选择要上传的文件。 2. **读取文件**:使用`java.io`包中的`FileInputStream`类读取选定文件的内容。 3. **创建HTTP请求**:为了发送文件,我们...

    制作一个文本编辑器-java课程设计报告.doc

    - 实现文件操作功能,如使用JFileChooser对话框让用户选择文件,使用FileOutputStream写入文件。 - 实现复制和粘贴功能,利用Clipboard API。 ### 三、测试结果与心得体会 这部分未提供具体细节,但通常会包括对...

    java模拟实现系统记事本

    - 新建、打开、保存、另存为:这些功能可以通过`JFileChooser`来实现,它允许用户选择文件进行打开、保存或另存。需要实现对应的文件读写操作,可以使用`BufferedReader`和`BufferedWriter`处理文本文件。 - 复制...

    仿windowsJAVA课程设计汇本记事本.doc

    设计中,我们创建了一个名为`EditorDemo`的类,它继承自`JFrame`,并使用`JTextPane`作为文本编辑区域,`JLabel`作为状态栏,`JFileChooser`用于文件选择,以及`JMenuBar`和`JToolBar`构建菜单栏和工具栏。...

    Java实训报告电子版.doc

    为了响应用户的操作,需要为菜单项添加监听器。例如,实现“打开”菜单项的监听器: ```java openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser ...

    Java swing 学生管理系统

    在上传图片功能中,系统可能使用了Java的文件I/O操作,如FileInputStream和FileOutputStream,以及Swing的JFileChooser组件来选择本地图片文件。图片数据可能被存储在数据库的BLOB(Binary Large Object)字段中,...

    简易记事本

    在这个项目中,我们可能用到JFrame作为主窗口,JButton创建按钮,JTextArea提供文本编辑区域,JMenuBar创建菜单栏,JFileChooser实现文件打开和保存功能。 2. **事件监听**:为了响应用户的操作,比如点击按钮、...

    学生成绩管理

    此外,代码片段中提到了`JFileChooser`类,该类用于实现一个文件选择器对话框,允许用户选择文件夹和文件。这可能意味着系统中有导入和导出数据的功能,比如从文件中读取学生的成绩数据,或保存生成的图表到文件中。...

    Java记事本源码

    在Java记事本中,开发者可能使用了JFrame作为主窗口,JButton、JMenuItem等组件来创建菜单栏和工具栏,JTextArea用于显示和编辑文本,以及JFileChooser来打开和保存文件。 3. **事件监听**:在Swing中,事件监听...

    Java实验报告书样本5个实验 word格式 可以直接上交的

    3. 实现文件操作功能,如打开文件对话框,读取和写入文件内容。 4. 添加事件监听,如菜单项的ActionListener,实现文件操作的逻辑。 通过这两个实验,学生将掌握Java开发的基本技能,包括环境配置、程序编写、编译...

    java操作excel(.xlsx)

    在这个项目中,Swing可能被用来设计一个交互式的界面,让用户选择文件、查看内容、重排序等。例如,JFileChooser用于打开文件对话框,JTable用于显示Excel数据。 6. **模板文件**: 提到的模板文件可能位于`src/...

    Java swing图形界面开发与案例详解_代码

    2. 文件浏览器:使用JFileChooser展示文件和目录,选择文件或目录后在JTextArea中显示路径。 3. 聊天窗口:创建包含输入框、发送按钮和消息显示区的聊天应用,使用EventQueue.invokeLater()实现异步更新UI。 4. 日历...

    java文本编辑器[收集].pdf

    - 测试包括验证各种功能的正确性,如文件打开、保存、文本编辑、查找替换等。 8. **源代码结构**: - 类`Notepad`继承自`JFrame`,实现了`ActionListener`、`ItemListener`和`DocumentListener`接口,包含了文本...

    软著V1 基于Java的远程桌面监控源代码 交底.docx

    3. **文件操作**:`FileOutputStream`用于写入文件,`JFileChooser`则用于打开文件选择对话框,让用户选择要操作的文件。 4. **多线程**:虽然代码中没有明确展示,但在实现远程桌面监控时,通常需要在后台线程处理...

    将Excel解析成sql

    本教程将详细介绍如何使用Java编程语言,通过JFileChooser组件读取Excel文件,并将其内容解析成SQL语句。 首先,我们需要理解JFileChooser。它是Java Swing库中的一个组件,允许用户选择文件或目录。在Java程序中,...

    eclipse 3.4.1项目java记事本源码

    在“打开”和“保存”操作中,我们需要用到它来让用户选择文件路径。 7. **FileReader, FileWriter, BufferedReader, BufferedWriter**: 这些是Java I/O流中的类,用于读写文件。在记事本应用中,它们用于将文本...

Global site tag (gtag.js) - Google Analytics