iFile.GetFile чувствителен к регистру

#java #java-8 #eclipse-plugin

#java #java-8 #eclipse-плагин

Вопрос:

Скажем, в моей рабочей области есть определенные файлы в корневой папке, например foo.xml , foo1.xml , foo2.xml , foo3.xml .

 final List<String> configFiles = new ArrayList<>();
configFiles.add("foo.xml");
configFiles.add("foo1.xml");
configFiles.add("Foo2.xml");

final List<IFile> iFiles = configFiles.stream()
                .map(project::getFile)
                .filter(IFile::exists)
                .collect(Collectors.toList());
  

Когда я создаю GetFile в проекте, iFile ожидает имя файла с учетом регистра, скажем, есть foo2.xml в моем рабочем пространстве, и я пытаюсь получить доступ Foo2.xml , Я не получаю файл.
Как я могу получить файлы независимо от регистра?

Ответ №1:

Я не думаю, что есть простой способ.

Вы могли бы получить вызов members() в проекте:

 IResource [] members = project.members();
  

а затем сопоставьте имена членов, используя equalsIgnoreCase :

  private IFile findFile(IResource [] members, String name)
  {
    for (IResource member : members) {
      if (name.equalsIgnoreCase(member.getName())) {
        if (member instanceof IFile) {
          return (IFile)member;
        }
        return null;
      }
    }
    
    return null;
  }
  

таким образом, поток будет:

    final List<IFile> iFiles = configFiles.stream()
                    .map(file -> findFile(members, file))
                    .filter(Objects::nonNull)
                    .collect(Collectors.toList());