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