Как выбрать все файлы в FileDialog?

Я хочу выбрать все файлы, чтобы исключить их отображение в моем FileDialog.

        FileDialog fileDialog = new FileDialog(this, "Some Title", FileDialog.LOAD);
    fileDialog.setFilenameFilter(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            if(name.endsWith(".*")) {
                return false;
            }else {
                return true;
            }
        }
    });
    fileDialog.setVisible(true);

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

Спасибо за вашу помощь!


person Algram    schedule 24.04.2015    source источник
comment
Что вы получаете в результате этого?   -  person Joop    schedule 24.04.2015
comment
Почему вы хотите исключить все файлы? Вы просто хотите показать каталоги?   -  person copeg    schedule 24.04.2015
comment
Он просто показывает все, файлы и каталоги. Я думаю, что *-оператор не работает внутри строки.   -  person Algram    schedule 24.04.2015
comment
@copeg Да, я хочу показывать только каталоги.   -  person Algram    schedule 24.04.2015
comment
return dir.isDirectory()   -  person jmj    schedule 24.04.2015
comment
Ну, endWith принимает строковый литерал, а не регулярное выражение. Что именно ты пытаешься сделать?   -  person copeg    schedule 24.04.2015
comment
возможный дубликат SWT FileDialog: выбор каталогов вместо файлов   -  person JFPicard    schedule 24.04.2015
comment
@JigarJoshi О боже, ты прав! Спасибо чувак! Я совершенно неправильно понял, как работает метод accept! Я пытался return dir.isDirectory() раньше!   -  person Algram    schedule 24.04.2015
comment
«Да, я хочу показывать только каталоги», это информация, которая должна была быть включена в ваш вопрос.   -  person copeg    schedule 24.04.2015
comment
@copeg Я добавил, что ваш ответ по-прежнему остается неверным.   -  person Algram    schedule 24.04.2015
comment
Зачем использовать FileDialog на основе AWT, когда JFileChooser на основе Swing намного лучше, и есть способ ограничить выбираемый файл каталогом (объявление даже не показывает файлы)!   -  person Andrew Thompson    schedule 25.04.2015
comment
@AndrewThompson Потому что он не выглядит родным для Linux / Mac, в отличие от FileDialog. Прочтите его, его очень часто используют на других ОС.   -  person Algram    schedule 25.04.2015


Ответы (2)


Вы можете использовать JFileChooser, используя FileFilter чтобы проверить объект File, чтобы увидеть, является ли он каталогом

  @Override
  public boolean accept( File file ) {
    return file.isDirectory();
  }

FileFilter FileDialog должен работать аналогично. Также обратите внимание на API для метод setFileFilter FileDialog:

«Фильтры имен файлов не работают в эталонной реализации Sun для Microsoft Windows».

person copeg    schedule 24.04.2015
comment
Вы тоже неправильно поняли принцип работы метода :) Это return file.isFile() - person Algram; 24.04.2015
comment
Yes, I only want to show directories. Использование return file.isDirectory() покажет только каталоги. Использование return file.isFile() покажет только файлы. Что это? - person copeg; 24.04.2015
comment
Нет, потому что FileDialog.setFilenameFilter() требует FileNAMEFilter, а не FileFilter. Этот FileNameFilter работает по-другому, потому что файл, который он ожидает в методе accept, на самом деле является каталогом. Вот я тоже поначалу запутался. - person Algram; 24.04.2015
comment
Я знаю о предупреждении API, но я на Linux, поэтому меня это не беспокоит. Тем не менее, ваш ответ неверен .. - person Algram; 24.04.2015

Как уже говорилось ранее, я нашел ответ на этот вопрос с помощью @JigarJoshi.

Это рабочий код для отображения ТОЛЬКО каталогов в AWT FileDialog:

fileDialog.setFilenameFilter(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return dir.isFile();
    }
});

Обратите внимание, что использование FileDialog вместо JFileChooser рекомендуется только в том случае, если вы работаете в системе, отличной от Windows. Однако на Mac и Linux лучше использовать FileDialog, так как он выглядит более естественно.

Большое спасибо за ваш вклад!

person Algram    schedule 24.04.2015