TreeContentProvider просто получает каждый каталог моего пути. (Фильтр файлов)

#java #file #filter #jface #rcp

#java #файл #Фильтр #jface #rcp

Вопрос:

я пытаюсь получить каждую папку моего пути. Теперь я получаю только папки, но как только появляется какой-то другой файл, он выдает мне исключение JavaNullPointerException. Я знаю, что это связано с listFiles(), но я не знаю, как позволить ему работать иначе. Кто-нибудь может мне помочь?

«

 @Override
public Object[] getElements(Object inputElement) {
    return File.listRoots();
}

@Override
public Object getParent(Object element) {
    return ((File) element).getParentFile();
}

@Override
public boolean hasChildren(Object element) {
    Object[] obj = getChildren(element);       
    return obj == null ? false : obj.length > 0;
    
}

@Override
public Object[] getChildren(Object parentElement) {
    
    List<File> files = new ArrayList<>();
        for (File file : ((File) parentElement).listFiles()) {
            if (file.isDirectory()) {
                files.add(file);
            }
        }
    return ((File) parentElement).listFiles();
}
  

Комментарии:

1. Нулевой указатель, где точно ?

2. Здесь : для (File file: ((File) parentElement .listFiles())

3. Ну, listFiles возвращает null, если файл не является каталогом, вызывающим эту ошибку. Вы должны проверить, является ли это каталогом, прежде чем делать это.

4. Да, я думал об этом, у вас есть пример кода для этого?

Ответ №1:

File.listFiles() возвращает null, если файл не является каталогом. Это вызывает ваше исключение.

Чтобы просто показать каталоги, используйте что-то вроде:

 @Override
public Object[] getChildren(Object parentElement) {
   File parentFile = (File)parentElement;

   if (!parentFile.isDirectory()) {
      return new Object[0];
   }

   return parentFile.listFiles(File::isDirectory);
}