java文件对话框过滤特定文件类型示例
思路分析:
因为是窗体应用,首先看视图层。需要一个按钮控件JButton用来选择文件夹;需要一个标签控件JLabel用来显示选择的路径;需要一个标签控件JLabel提示用户输入什么;需要一个文本框控件JTextField供用户输入文件类型;需要一个表格控件JTable显示选中目录下指定类型的文件。
对于按钮控件,为其绑定事件处理方法,在该方法中首先创建JFileChooser文件选择器对象,为该对象设置选择器的过滤器,即通过JFileChoose类的setFileSelectionMode()方法设定只能选择路径,然后执行showDialog()方法,再使用JFileChooser类的getSelectedFile()方法获取选中路径,赋值给一个File型变量,使用toString()方法将该路径显示在标签中,最后获取过滤后的符合条件的文件数组。
对于文本框控件,一旦里面的文字发生变化,就要重新对选中路径中的文件进行过滤,所以通过JTextField类的addCaretListener()方法为其绑定事件处理方法,在该方法中获取过滤后的符合条件的文件数组。
因为按钮控件和文本框控件都要实现过滤及显示,故可以将过滤及显示单独作为一个方法,在该方法中首先判断当前路径是否为空,若不为空则使用File类的listFiles()方法获取符合条件的文件数组,赋值给一个File型数组,然后使用JTable类的getModel()方法获取表格的数据模型,使用DefaultTableModel类的setRowCount()方法先将表格清空,然后使用foreach()循环遍历文件数组,在循环中使用Object[]数组创建表格行数据,调用File类的getName()方法获取文件名,length()方法获取文件大小,lastModified()方法获取修改日期,最后使用DefaultTableModel类的addRow()方法添加行数据到表格模型。
代码如下:
importjava.awt.BorderLayout;
importjava.awt.EventQueue;
importjava.awt.GridBagConstraints;
importjava.awt.GridBagLayout;
importjava.awt.Insets;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.File;
importjava.sql.Date;
importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjavax.swing.JTextField;
importjavax.swing.border.EmptyBorder;
importjavax.swing.event.CaretEvent;
importjavax.swing.event.CaretListener;
importjavax.swing.table.DefaultTableModel;
publicclassListCustomTypeFileextendsJFrame{
/**
*
*/
privatestaticfinallongserialVersionUID=-6263975104443132420L;
/**
*自定义扩展名过滤器
*
*@author李钟尉
*/
privatefinalclassCustomFilterimplementsjava.io.FileFilter{
@Override
publicbooleanaccept(Filepathname){
//获取用户设置的指定扩展名
StringextName=extNameField.getText();
if(extName==null||extName.isEmpty())
returnfalse;
if(!extName.startsWith("."))//判断扩展名前缀
extName="."+extName;//完事扩展名前缀
extName=extName.toLowerCase();
//判断扩展名与过滤文件名是否符合要求
if(pathname.getName().toLowerCase().endsWith(extName))
returntrue;
returnfalse;
}
}
privateJPanelcontentPane;
privateJTextFieldextNameField;
privateJTabletable;
privateFiledir;
privateJLabellabel;
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
ListCustomTypeFileframe=newListCustomTypeFile();
frame.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
});
}
/**
*Createtheframe.
*/
publicListCustomTypeFile(){
setTitle("显示指定类型的文件");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,450,300);
contentPane=newJPanel();
contentPane.setBorder(newEmptyBorder(5,5,5,5));
contentPane.setLayout(newBorderLayout(0,0));
setContentPane(contentPane);
JPanelpanel=newJPanel();
contentPane.add(panel,BorderLayout.NORTH);
GridBagLayoutgbl_panel=newGridBagLayout();
gbl_panel.columnWidths=newint[]{93,54,0};
gbl_panel.rowHeights=newint[]{23,0,0};
gbl_panel.columnWeights=newdouble[]{0.0,1.0,Double.MIN_VALUE};
gbl_panel.rowWeights=newdouble[]{0.0,0.0,Double.MIN_VALUE};
panel.setLayout(gbl_panel);
JButtonbutton=newJButton("选择文件夹");
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
do_button_actionPerformed(e);
}
});
GridBagConstraintsgbc_button=newGridBagConstraints();
gbc_button.anchor=GridBagConstraints.NORTH;
gbc_button.gridx=0;
gbc_button.gridy=0;
panel.add(button,gbc_button);
label=newJLabel("文件夹");
GridBagConstraintsgbc_label=newGridBagConstraints();
gbc_label.fill=GridBagConstraints.HORIZONTAL;
gbc_label.gridx=1;
gbc_label.gridy=0;
panel.add(label,gbc_label);
JLabellabel_1=newJLabel("输入指定文件扩展名称:");
GridBagConstraintsgbc_label_1=newGridBagConstraints();
gbc_label_1.anchor=GridBagConstraints.EAST;
gbc_label_1.insets=newInsets(0,0,0,5);
gbc_label_1.gridx=0;
gbc_label_1.gridy=1;
panel.add(label_1,gbc_label_1);
extNameField=newJTextField();
extNameField.addCaretListener(newCaretListener(){
publicvoidcaretUpdate(CaretEvente){
do_extNameField_caretUpdate(e);
}
});
extNameField.setText(".gif");
GridBagConstraintsgbc_extNameField=newGridBagConstraints();
gbc_extNameField.insets=newInsets(0,0,5,0);
gbc_extNameField.fill=GridBagConstraints.HORIZONTAL;
gbc_extNameField.gridx=1;
gbc_extNameField.gridy=1;
panel.add(extNameField,gbc_extNameField);
extNameField.setColumns(10);
JScrollPanescrollPane=newJScrollPane();
contentPane.add(scrollPane,BorderLayout.CENTER);
table=newJTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setModel(newDefaultTableModel(newObject[][]{},newString[]{"文件名称","文件大小","修改日期"}){
/**
*
*/
privatestaticfinallongserialVersionUID=5274214559103654856L;
boolean[]columnEditables=newboolean[]{false,false,false};
publicbooleanisCellEditable(introw,intcolumn){
returncolumnEditables[column];
}
});
table.getColumnModel().getColumn(0).setPreferredWidth(220);
table.getColumnModel().getColumn(1).setPreferredWidth(85);
table.getColumnModel().getColumn(2).setPreferredWidth(110);
scrollPane.setViewportView(table);
}
/**
*选择文件夹按钮的事件处理方法
*
*@parame
*/
protectedvoiddo_button_actionPerformed(ActionEvente){
JFileChooserchooser=newJFileChooser();//创建文件选择器
//设置选择器的过滤器
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.showDialog(this,null);
dir=chooser.getSelectedFile();
getLabel().setText(dir.toString());
//获取过滤后的符合条件的文件数组
listFiles();
}
/**
*显示文件夹中的文件
*/
privatevoidlistFiles(){
if(dir==null)
return;
//获取符合条件的文件数组
File[]files=dir.listFiles(newCustomFilter());
//获取表格的数据模型
DefaultTableModelmodel=(DefaultTableModel)table.getModel();
model.setRowCount(0);
for(Filefile:files){//遍历文件数组
//创建表格行数据
Object[]row={file.getName(),file.length(),
newDate(file.lastModified())};
model.addRow(row);//添加行数据到表格模型
}
}
protectedvoiddo_extNameField_caretUpdate(CaretEvente){
listFiles();
}
protectedJLabelgetLabel(){
returnlabel;
}
}
效果如图:
相关文章
- JAVA代码实现FTP文件下载
- java强制删文件夹_Java 删除文件夹 和 文件 集合
- java backoff_Java BackOff类代码示例
- java启动器_JAVA基础:Java 启动器如何查找类
- java课程设计成绩管理系统_Java课程设计–学生成绩管理系统
- java数组去重_JAVA数组去重常用方法
- java一个字符几个字节_Java 语言中一个字符占几个字节?
- JAVA为啥要用stream流处理_java哪个部分最难学
- JAVA读取csv文件_java读取csv文件某一列
- 将CSV文件导进MySQL表格的Java示例详解数据库
- java获得文件的最后修改时间详解编程语言
- Java 通过FTP 上传文件的简单例子详解编程语言
- Java统计目录文件下行数的总和,注释行数的总和,空行数总和详解编程语言
- JAVA文件重命名详解编程语言
- Java问题-java进程占用内存过高,排查原因详解编程语言
- 服务器上的文件Java获取Linux服务器文件:简单又高效的操作方法(java获取linux)
- Java桥接Oracle让数据轻松流动(java桥接oracle)
- 使用java实现http多线程断点下载文件(一)
- java通过url读取文件内容示例
- 简单的java读取文件示例分享
- java生成csv文件乱码的解决方法示例java导出csv乱码
- java复制文件和java移动文件的示例分享