有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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中显示文件名,以便用户从下拉列表中选择他们感兴趣的文件


共 (3) 个答案

  1. # 1 楼答案

    编写一个java.io.FilenameFilter使用正则表达式过滤掉不可接受的文件名

    我建议使用正则表达式,因为我假设您希望动态更改模式。在那种情况下,这并不是过分。对于你举的例子,一个固定的解决方案对我来说似乎没什么用处。我假设用户希望告诉您他们希望如何通过在UI中指定模式来改变模式

  2. # 2 楼答案

    使用filename.startsWith ("20011-")作为筛选谓词

  3. # 3 楼答案

    使用JFileChooser而不是JOptionPanewith列表。例如

    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;
        }
    }