Поиск всех файлов определенной схемы именования в Java - PullRequest
1 голос
/ 16 мая 2011

Предположим, у меня есть куча файлов, названных так:

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 ]

6 голосов
/ 16 мая 2011

Напишите java.io.FilenameFilter, использующее регулярное выражение, отфильтровывающее недопустимые имена файлов.

Я рекомендую регулярное выражение, поскольку я предполагаю, что вы захотите изменить шаблон динамически.В этом случае это не излишне.Решение для примера, которое вы привели, не кажется мне полезным.Я предполагаю, что пользователи захотят рассказать вам, как они хотят изменить шаблон, указав его в пользовательском интерфейсе ..

2 голосов
/ 16 мая 2011

Используйте JFileChooser вместо JOptionPane со списком.EG

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;
    }
}
0 голосов
/ 16 мая 2011

Используйте filename.startsWith ("20011-") в качестве предиката фильтрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...