文件作为存储数据的单元,会根据数据类型产生很多分类,也就是所谓的文件类型。在对数据文件进行操作时,常常需要根据不同的文件类型来作不同的处理。本实例实现的是读取文件夹指定类型的文件并显示到表格控件中。这对于项目开发中的文件分类起到了抛砖引玉的作用。
思路分析:
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201 |
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.sql.Date; import
javax.swing.JButton; import
javax.swing.JFileChooser; import
javax.swing.JFrame; import
javax.swing.JLabel; import
javax.swing.JPanel; import
javax.swing.JScrollPane; import
javax.swing.JTable; import
javax.swing.JTextField; import
javax.swing.border.EmptyBorder; import
javax.swing.event.CaretEvent; import
javax.swing.event.CaretListener; import
javax.swing.table.DefaultTableModel; public
class ListCustomTypeFile extends
JFrame { /** * */ private
static final long serialVersionUID = -6263975104443132420L; /** * 自定义扩展名过滤器 * * @author 李钟尉 */ private
final class CustomFilter implements
java.io.FileFilter { @Override public
boolean accept(File pathname) { // 获取用户设置的指定扩展名 String extName = extNameField.getText(); if
(extName == null
|| extName.isEmpty()) return
false ; if
(!extName.startsWith( "." )) // 判断扩展名前缀 extName = "."
+ extName; // 完事扩展名前缀 extName = extName.toLowerCase(); // 判断扩展名与过滤文件名是否符合要求 if
(pathname.getName().toLowerCase().endsWith(extName)) return
true ; return
false ; } } private
JPanel contentPane; private
JTextField extNameField; private
JTable table; private
File dir; private
JLabel label; /** * Launch the application. */ public
static void main(String[] args) { EventQueue.invokeLater( new
Runnable() { public
void run() { try
{ ListCustomTypeFile frame = new
ListCustomTypeFile(); frame.setVisible( true ); } catch
(Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public
ListCustomTypeFile() { setTitle( "显示指定类型的文件" ); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds( 100 , 100 , 450 , 300 ); contentPane = new
JPanel(); contentPane.setBorder( new
EmptyBorder( 5 , 5 , 5 , 5 )); contentPane.setLayout( new
BorderLayout( 0 , 0 )); setContentPane(contentPane); JPanel panel = new
JPanel(); contentPane.add(panel, BorderLayout.NORTH); GridBagLayout gbl_panel = new
GridBagLayout(); gbl_panel.columnWidths = new
int [] { 93 , 54 , 0
}; gbl_panel.rowHeights = new
int [] { 23 , 0 , 0
}; gbl_panel.columnWeights = new
double [] { 0.0 , 1.0 , Double.MIN_VALUE }; gbl_panel.rowWeights = new
double [] { 0.0 , 0.0 , Double.MIN_VALUE }; panel.setLayout(gbl_panel); JButton button = new
JButton( "选择文件夹" ); button.addActionListener( new
ActionListener() { public
void actionPerformed(ActionEvent e) { do_button_actionPerformed(e); } }); GridBagConstraints gbc_button = new
GridBagConstraints(); gbc_button.anchor = GridBagConstraints.NORTH; gbc_button.gridx = 0 ; gbc_button.gridy = 0 ; panel.add(button, gbc_button); label = new
JLabel( "文件夹" ); GridBagConstraints gbc_label = new
GridBagConstraints(); gbc_label.fill = GridBagConstraints.HORIZONTAL; gbc_label.gridx = 1 ; gbc_label.gridy = 0 ; panel.add(label, gbc_label); JLabel label_1 = new
JLabel( "输入指定文件扩展名称:" ); GridBagConstraints gbc_label_1 = new
GridBagConstraints(); gbc_label_1.anchor = GridBagConstraints.EAST; gbc_label_1.insets = new
Insets( 0 , 0 , 0 , 5 ); gbc_label_1.gridx = 0 ; gbc_label_1.gridy = 1 ; panel.add(label_1, gbc_label_1); extNameField = new
JTextField(); extNameField.addCaretListener( new
CaretListener() { public
void caretUpdate(CaretEvent e) { do_extNameField_caretUpdate(e); } }); extNameField.setText( ".gif" ); GridBagConstraints gbc_extNameField = new
GridBagConstraints(); gbc_extNameField.insets = new
Insets( 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 ); JScrollPane scrollPane = new
JScrollPane(); contentPane.add(scrollPane, BorderLayout.CENTER); table = new
JTable(); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setModel( new
DefaultTableModel( new
Object[][] {}, new
String[] { "文件名称" , "文件大小" , "修改日期"
}) { /** * */ private
static final long serialVersionUID = 5274214559103654856L; boolean [] columnEditables = new
boolean [] { false , false , false
}; public
boolean isCellEditable( int
row, int
column) { return
columnEditables[column]; } }); table.getColumnModel().getColumn( 0 ).setPreferredWidth( 220 ); table.getColumnModel().getColumn( 1 ).setPreferredWidth( 85 ); table.getColumnModel().getColumn( 2 ).setPreferredWidth( 110 ); scrollPane.setViewportView(table); } /** * 选择文件夹按钮的事件处理方法 * * @param e */ protected
void do_button_actionPerformed(ActionEvent e) { JFileChooser chooser = new
JFileChooser(); // 创建文件选择器 // 设置选择器的过滤器 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.showDialog( this , null ); dir = chooser.getSelectedFile(); getLabel().setText(dir.toString()); // 获取过滤后的符合条件的文件数组 listFiles(); } /** * 显示文件夹中的文件 */ private
void listFiles() { if
(dir == null ) return ; // 获取符合条件的文件数组 File[] files = dir.listFiles( new
CustomFilter()); // 获取表格的数据模型 DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setRowCount( 0 ); for
(File file : files) { // 遍历文件数组 // 创建表格行数据 Object[] row = { file.getName(), file.length(), new
Date(file.lastModified()) }; model.addRow(row); // 添加行数据到表格模型 } } protected
void do_extNameField_caretUpdate(CaretEvent e) { listFiles(); } protected
JLabel getLabel() { return
label; } } |
效果如图:
原文:http://www.cnblogs.com/cysolo/p/3570424.html