2017-01-02 6 views
0

Я пытаюсь использовать JFileChooser только выбрать файлы, устраняющие любые каталоги в папке:JFileChooser.FILES_ONLY получать как файлы и каталоги

fc.setFileSelectionMode(JFileChooser.FILES_ONLY);    // Only look at files 
fc.setCurrentDirectory(new File(dbPath)); 
int returnVal = fc.showOpenDialog(null);      // Switch DB dialog 
if (returnVal == JFileChooser.APPROVE_OPTION)     // Get good DB? 
{ 

    filePDF = fc.getSelectedFile().getAbsolutePath();  // Get path 
    txtTSDir.setText(filePDF); 
} 
else 

Однако, я получаю как файлы и каталоги. Это кажется довольно прямолинейным. Что я пропустил?

enter image description here

ответ

0

К сожалению пришлось переписать его несколько раз мой разум троллей меня, объясняя.

Хорошо, так что вы думаете, что настройка вашего FileSelectionMode на FILES_ONLY сделает ваш JFileChooser только отображаемыми файлами и больше не будет показывать каталоги. Но что на самом деле происходит, это больше не позволит вам выбирать каталоги в качестве ввода. Это гарантирует, что вы получаете файл, когда ожидаете его.

НО. Поскольку было бы неудобно перемещаться, не видя Каталогов, они все еще отображаются, и вы можете войти в них (из-за причины)

То же самое касается direcotries_only, это все равно покажет вам файлы, но вы не можете выбрать их в качестве входных данных.

+0

Спасибо. Знал, что мне что-то не хватает. Это объясняет мое заблуждение. –

0

Флаг JFileChooser.FILES_ONLY указывает, что вы можете выбирать файлы. Каталоги отображаются, потому что пользователь может захотеть найти в них файл.

Если вы хотите исключить каталоги использования вида FileFilter

fc.setFileFilter(new FileFilter() { 

     @Override 
     public String getDescription() { 
      return "Only files"; 
     } 

     @Override 
     public boolean accept(File f) { 
      return !f.isDirectory(); 
     } 
    }); 
2

Похоже, вы хотите, чтобы скрыть каталоги. Таким образом, просто создавать пользовательские FileSystemView:

JFileChooser jFileChooser = new JFileChooser(); 

jFileChooser.setFileSystemView(new FileSystemView() { 
    @Override 
    public File[] getFiles(File dir, boolean useFileHiding) { 
     return Arrays.stream(super.getFiles(dir, useFileHiding)).filter(File::isFile).toArray(File[]::new); 
    } 

    @Override 
    public File createNewFolder(File containingDir) throws IOException { 
     throw new NotImplementedException(); 
    } 
}); 

Как вы можете видеть, что я оставить только файлы в getFiles метод и теперь я вижу только файлы в моем домашнем каталоге:

hide directories in home directory

+0

Спасибо. Я могу использовать это. –

Смежные вопросы