Я столкнулся с той же проблемой, и это вкратце то, что я сделал:
IResource getResource(IProject project, String folderPath, String fileName) {
IJavaProject javaProject = JavaCore.create(project);
for (IPackageFragmentRoot root : javaProject.getAllPackageFragmentRoots()) {
IPackageFragment folderFragment = root.getPackageFragement(folderPath);
IResource folder = folderFragment.getResource();
if (folder == null || ! folder.exists() || !(folder instanceof IContainer)) {
continue;
}
IResource resource = ((IContainer) folder).findMember(fileName);
if (resource.exists()) {
return resource;
}
}
// file not found in any source path
return null;
}
Это выглядит довольно некрасиво и, возможно, есть более прямой подход.Но это работает.
Если вам нужно использовать classpath, вы должны использовать IJavaProject
, а способ работы фрагментов препятствует прямому поиску пути к файлу, потому что он примет "."(точка) в имени файла является разделителем пакета Java.Так что я думаю, вам нужно сначала найти нужную папку, а затем файл.