在 java 中查找特定命名方案的所有文件



>假设我有一堆文件这样命名:

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-") 作为筛选谓词。

相关内容

  • 没有找到相关文章

最新更新