>假设我有一堆文件这样命名:
10011-1-chassis.EDRW
10011-2-front.EDRW
10011-3-rear.EDRW
20011-1-chassis.EDRW
20011-2-front.EDRW
20011-3-back.EASM
20011-3-cover.EASM
如果我只想要 20011-x 文件,那么我将如何列出所有文件,然后只列出适当的文件,以便我可以在 JOptionPane 中显示文件名,供用户从下拉列表中选择他们感兴趣的文件?
编写一个使用正则表达式的java.io.FilenameFilter
,该表达式会筛选出不可接受的文件名。
我推荐一个正则表达式,因为我假设您需要动态更改模式。 在这种情况下,这并不过分。 您引用的示例的硬连线解决方案对我来说似乎没有那么有用。 我假设用户希望通过在UI中指定模式来告诉您他们希望如何更改模式。
使用 JFileChooser
而不是 JOptionPane
with list。 例如
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.File;
class ShowPrefixedDrawings {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(true);
chooser.setAcceptAllFileFilterUsed(false);
String prefix = JOptionPane.showInputDialog(
null, "Prefix", "D");
chooser.setFileFilter(
new PrefixDrawingFileFilter(prefix));
int result = chooser.showOpenDialog(null);
if (result==JFileChooser.APPROVE_OPTION) {
File[] files = chooser.getSelectedFiles();
for (File file : files) {
System.out.println(file.getName());
}
}
System.exit(0);
}
});
}
}
class PrefixDrawingFileFilter extends FileFilter {
String prefix;
String[] suffixes = {"dwg", "dxf", "DWG", "DXF"};
PrefixDrawingFileFilter(String prefix) {
this.prefix = prefix;
}
public boolean accept(File f) {
if (f.isDirectory()) return true;
String name = f.getName();
if ( name.startsWith(prefix) ) {
for (String type : suffixes) {
if (name.endsWith(type)) return true;
}
}
return false;
}
public String getDescription() {
return "eDrawings Viewer files starting with " + prefix;
}
}
使用 filename.startsWith ("20011-")
作为筛选谓词。