實作:讀取檔案夾指定類型的檔案,并顯示到表格控件中。
應用:對于項目開發中的檔案分類起到了抛磚引玉的作用。
效果圖:
<a href="http://blog.51cto.com/attachment/201310/124437433.jpg" target="_blank"></a>
實作代碼:
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
202
<code>package</code> <code>com.lixiyu;</code>
<code>import</code> <code>java.awt.BorderLayout;</code>
<code>import</code> <code>java.awt.EventQueue;</code>
<code>import</code> <code>java.awt.GridBagConstraints;</code>
<code>import</code> <code>java.awt.GridBagLayout;</code>
<code>import</code> <code>java.awt.Insets;</code>
<code>import</code> <code>java.awt.event.ActionEvent;</code>
<code>import</code> <code>java.awt.event.ActionListener;</code>
<code>import</code> <code>java.io.File;</code>
<code>import</code> <code>java.sql.Date;</code>
<code>import</code> <code>javax.swing.JButton;</code>
<code>import</code> <code>javax.swing.JFileChooser;</code>
<code>import</code> <code>javax.swing.JFrame;</code>
<code>import</code> <code>javax.swing.JLabel;</code>
<code>import</code> <code>javax.swing.JPanel;</code>
<code>import</code> <code>javax.swing.JScrollPane;</code>
<code>import</code> <code>javax.swing.JTable;</code>
<code>import</code> <code>javax.swing.JTextField;</code>
<code>import</code> <code>javax.swing.border.EmptyBorder;</code>
<code>import</code> <code>javax.swing.event.CaretEvent;</code>
<code>import</code> <code>javax.swing.event.CaretListener;</code>
<code>import</code> <code>javax.swing.table.DefaultTableModel;</code>
<code>public</code> <code>class</code> <code>ListCustomTypeFile </code><code>extends</code> <code>JFrame {</code>
<code> </code><code>/**</code>
<code> </code><code>*</code>
<code> </code><code>*/</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>long</code> <code>serialVersionUID = -6263975104443132420L;</code>
<code> </code><code>* 自定義擴充名過濾器</code>
<code> </code><code>* @author DylanLee</code>
<code> </code><code>private</code> <code>final</code> <code>class</code> <code>CustomFilter </code><code>implements</code> <code>java.io.FileFilter {</code>
<code> </code><code>@Override</code>
<code> </code><code>public</code> <code>boolean</code> <code>accept(File pathname) {</code>
<code> </code><code>// 擷取使用者設定的指定擴充名</code>
<code> </code><code>String extName = extNameField.getText();</code>
<code> </code><code>if</code> <code>(extName == </code><code>null</code> <code>|| extName.isEmpty())</code>
<code> </code><code>return</code> <code>false</code><code>;</code>
<code> </code><code>if</code> <code>(!extName.startsWith(</code><code>"."</code><code>))</code><code>// 判斷擴充名字首</code>
<code> </code><code>extName = </code><code>"."</code> <code>+ extName;</code><code>// 完事擴充名字首</code>
<code> </code><code>extName = extName.toLowerCase();</code>
<code> </code><code>// 判斷擴充名與過濾檔案名是否符合要求</code>
<code> </code><code>if</code> <code>(pathname.getName().toLowerCase().endsWith(extName))</code>
<code> </code><code>return</code> <code>true</code><code>;</code>
<code> </code><code>return</code> <code>false</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code>
<code> </code><code>private</code> <code>JPanel contentPane;</code>
<code> </code><code>private</code> <code>JTextField extNameField;</code>
<code> </code><code>private</code> <code>JTable table;</code>
<code> </code><code>private</code> <code>File dir;</code>
<code> </code><code>private</code> <code>JLabel label;</code>
<code> </code><code>* Launch the application.</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>
<code> </code><code>EventQueue.invokeLater(</code><code>new</code> <code>Runnable() {</code>
<code> </code><code>public</code> <code>void</code> <code>run() {</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>ListCustomTypeFile frame = </code><code>new</code> <code>ListCustomTypeFile();</code>
<code> </code><code>frame.setVisible(</code><code>true</code><code>);</code>
<code> </code><code>} </code><code>catch</code> <code>(Exception e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>});</code>
<code> </code><code>* Create the frame.</code>
<code> </code><code>public</code> <code>ListCustomTypeFile() {</code>
<code> </code><code>setTitle(</code><code>"\u663E\u793A\u6307\u5B9A\u7C7B\u578B\u7684\u6587\u4EF6"</code><code>);</code>
<code> </code><code>setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</code>
<code> </code><code>setBounds(</code><code>100</code><code>, </code><code>100</code><code>, </code><code>450</code><code>, </code><code>300</code><code>);</code>
<code> </code><code>contentPane = </code><code>new</code> <code>JPanel();</code>
<code> </code><code>contentPane.setBorder(</code><code>new</code> <code>EmptyBorder(</code><code>5</code><code>, </code><code>5</code><code>, </code><code>5</code><code>, </code><code>5</code><code>));</code>
<code> </code><code>contentPane.setLayout(</code><code>new</code> <code>BorderLayout(</code><code>0</code><code>, </code><code>0</code><code>));</code>
<code> </code><code>setContentPane(contentPane);</code>
<code> </code>
<code> </code><code>JPanel panel = </code><code>new</code> <code>JPanel();</code>
<code> </code><code>contentPane.add(panel, BorderLayout.NORTH);</code>
<code> </code><code>GridBagLayout gbl_panel = </code><code>new</code> <code>GridBagLayout();</code>
<code> </code><code>gbl_panel.columnWidths = </code><code>new</code> <code>int</code><code>[] { </code><code>93</code><code>, </code><code>54</code><code>, </code><code>0</code> <code>};</code>
<code> </code><code>gbl_panel.rowHeights = </code><code>new</code> <code>int</code><code>[] { </code><code>23</code><code>, </code><code>0</code><code>, </code><code>0</code> <code>};</code>
<code> </code><code>gbl_panel.columnWeights = </code><code>new</code> <code>double</code><code>[] { </code><code>0.0</code><code>, </code><code>1.0</code><code>, Double.MIN_VALUE };</code>
<code> </code><code>gbl_panel.rowWeights = </code><code>new</code> <code>double</code><code>[] { </code><code>0.0</code><code>, </code><code>0.0</code><code>, Double.MIN_VALUE };</code>
<code> </code><code>panel.setLayout(gbl_panel);</code>
<code> </code><code>JButton button = </code><code>new</code> <code>JButton(</code><code>"\u9009\u62E9\u6587\u4EF6\u5939"</code><code>);</code>
<code> </code><code>button.addActionListener(</code><code>new</code> <code>ActionListener() {</code>
<code> </code><code>public</code> <code>void</code> <code>actionPerformed(ActionEvent e) {</code>
<code> </code><code>do_button_actionPerformed(e);</code>
<code> </code><code>GridBagConstraints gbc_button = </code><code>new</code> <code>GridBagConstraints();</code>
<code> </code><code>gbc_button.anchor = GridBagConstraints.NORTH;</code>
<code> </code><code>gbc_button.gridx = </code><code>0</code><code>;</code>
<code> </code><code>gbc_button.gridy = </code><code>0</code><code>;</code>
<code> </code><code>panel.add(button, gbc_button);</code>
<code> </code><code>label = </code><code>new</code> <code>JLabel(</code><code>"\u6587\u4EF6\u5939"</code><code>);</code>
<code> </code><code>GridBagConstraints gbc_label = </code><code>new</code> <code>GridBagConstraints();</code>
<code> </code><code>gbc_label.fill = GridBagConstraints.HORIZONTAL;</code>
<code> </code><code>gbc_label.gridx = </code><code>1</code><code>;</code>
<code> </code><code>gbc_label.gridy = </code><code>0</code><code>;</code>
<code> </code><code>panel.add(label, gbc_label);</code>
<code> </code><code>JLabel label_1 = </code><code>new</code> <code>JLabel(</code>
<code> </code><code>"\u8F93\u5165\u6307\u5B9A\u6587\u4EF6\u6269\u5C55\u540D\u79F0\uFF1A"</code><code>);</code>
<code> </code><code>GridBagConstraints gbc_label_1 = </code><code>new</code> <code>GridBagConstraints();</code>
<code> </code><code>gbc_label_1.anchor = GridBagConstraints.EAST;</code>
<code> </code><code>gbc_label_1.insets = </code><code>new</code> <code>Insets(</code><code>0</code><code>, </code><code>0</code><code>, </code><code>0</code><code>, </code><code>5</code><code>);</code>
<code> </code><code>gbc_label_1.gridx = </code><code>0</code><code>;</code>
<code> </code><code>gbc_label_1.gridy = </code><code>1</code><code>;</code>
<code> </code><code>panel.add(label_1, gbc_label_1);</code>
<code> </code><code>extNameField = </code><code>new</code> <code>JTextField();</code>
<code> </code><code>extNameField.addCaretListener(</code><code>new</code> <code>CaretListener() {</code>
<code> </code><code>public</code> <code>void</code> <code>caretUpdate(CaretEvent e) {</code>
<code> </code><code>do_extNameField_caretUpdate(e);</code>
<code> </code><code>extNameField.setText(</code><code>".gif"</code><code>);</code>
<code> </code><code>GridBagConstraints gbc_extNameField = </code><code>new</code> <code>GridBagConstraints();</code>
<code> </code><code>gbc_extNameField.insets = </code><code>new</code> <code>Insets(</code><code>0</code><code>, </code><code>0</code><code>, </code><code>5</code><code>, </code><code>0</code><code>);</code>
<code> </code><code>gbc_extNameField.fill = GridBagConstraints.HORIZONTAL;</code>
<code> </code><code>gbc_extNameField.gridx = </code><code>1</code><code>;</code>
<code> </code><code>gbc_extNameField.gridy = </code><code>1</code><code>;</code>
<code> </code><code>panel.add(extNameField, gbc_extNameField);</code>
<code> </code><code>extNameField.setColumns(</code><code>10</code><code>);</code>
<code> </code><code>JScrollPane scrollPane = </code><code>new</code> <code>JScrollPane();</code>
<code> </code><code>contentPane.add(scrollPane, BorderLayout.CENTER);</code>
<code> </code><code>table = </code><code>new</code> <code>JTable();</code>
<code> </code><code>table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);</code>
<code> </code><code>table.setModel(</code><code>new</code> <code>DefaultTableModel(</code><code>new</code> <code>Object[][] {}, </code><code>new</code> <code>String[] {</code>
<code> </code><code>"\u6587\u4EF6\u540D\u79F0"</code><code>, </code><code>"\u6587\u4EF6\u5927\u5C0F"</code><code>,</code>
<code> </code><code>"\u4FEE\u6539\u65E5\u671F"</code> <code>}) {</code>
<code> </code><code>/**</code>
<code> </code><code>*</code>
<code> </code><code>*/</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>long</code> <code>serialVersionUID = 5274214559103654856L;</code>
<code> </code><code>boolean</code><code>[] columnEditables = </code><code>new</code> <code>boolean</code><code>[] { </code><code>false</code><code>, </code><code>false</code><code>, </code><code>false</code> <code>};</code>
<code> </code>
<code> </code><code>public</code> <code>boolean</code> <code>isCellEditable(</code><code>int</code> <code>row, </code><code>int</code> <code>column) {</code>
<code> </code><code>return</code> <code>columnEditables[column];</code>
<code> </code><code>table.getColumnModel().getColumn(</code><code>0</code><code>).setPreferredWidth(</code><code>220</code><code>);</code>
<code> </code><code>table.getColumnModel().getColumn(</code><code>1</code><code>).setPreferredWidth(</code><code>85</code><code>);</code>
<code> </code><code>table.getColumnModel().getColumn(</code><code>2</code><code>).setPreferredWidth(</code><code>110</code><code>);</code>
<code> </code><code>scrollPane.setViewportView(table);</code>
<code> </code><code>* 選擇檔案夾按鈕的事件處理方法</code>
<code> </code><code>* @param e</code>
<code> </code><code>protected</code> <code>void</code> <code>do_button_actionPerformed(ActionEvent e) {</code>
<code> </code><code>JFileChooser chooser = </code><code>new</code> <code>JFileChooser();</code><code>// 建立檔案選擇器</code>
<code> </code><code>// 設定選擇器的過濾器</code>
<code> </code><code>chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);</code>
<code> </code><code>chooser.showDialog(</code><code>this</code><code>, </code><code>null</code><code>);</code>
<code> </code><code>dir = chooser.getSelectedFile();</code>
<code> </code><code>getLabel().setText(dir.toString());</code>
<code> </code><code>// 擷取過濾後的符合條件的檔案數組</code>
<code> </code><code>listFiles();</code>
<code> </code><code>* 顯示檔案夾中的檔案</code>
<code> </code><code>private</code> <code>void</code> <code>listFiles() {</code>
<code> </code><code>if</code> <code>(dir == </code><code>null</code><code>)</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>// 擷取符合條件的檔案數組</code>
<code> </code><code>File[] files = dir.listFiles(</code><code>new</code> <code>CustomFilter());</code>
<code> </code><code>// 擷取表格的資料模型</code>
<code> </code><code>DefaultTableModel model = (DefaultTableModel) table.getModel();</code>
<code> </code><code>model.setRowCount(</code><code>0</code><code>);</code>
<code> </code><code>for</code> <code>(File file : files) {</code><code>// 周遊檔案數組</code>
<code> </code><code>// 建立表格行資料</code>
<code> </code><code>Object[] row = { file.getName(), file.length(),</code>
<code> </code><code>new</code> <code>Date(file.lastModified()) };</code>
<code> </code><code>model.addRow(row);</code><code>// 添加行資料到表格模型</code>
<code> </code><code>protected</code> <code>void</code> <code>do_extNameField_caretUpdate(CaretEvent e) {</code>
<code> </code><code>protected</code> <code>JLabel getLabel() {</code>
<code> </code><code>return</code> <code>label;</code>
<code>}</code>
本文轉自lixiyu 51CTO部落格,原文連結:http://blog.51cto.com/lixiyu/1308355,如需轉載請自行聯系原作者