【发布时间】:2014-03-11 21:08:15
【问题描述】:
仅给定 .java 文件的名称(字符串)和对其IJavaProject 的访问权限,我如何才能找到文件的 IFile 或完全限定路径?例如,如果文件名是Foo.java,我有字符串Foo。
这是我的尝试,但是太慢了:
// Find the fully qualified path from "fileName".
for (ICompilationUnit unit : JDTUtility.getCompilationUnits(javaProject))
{
if (unit.getElementName().equals(fileName))
file = (IFile) unit.getResource();
}
// Get a list of ICompilationUnits from an IJavaProject object
public static List<ICompilationUnit> getCompilationUnits(IJavaProject javaProject)
{
ArrayList<ICompilationUnit> units = new ArrayList<>();
try
{
IPackageFragmentRoot[] packageFragmentRoots = javaProject.getAllPackageFragmentRoots();
for (int i = 0; i < packageFragmentRoots.length; i++)
{
IPackageFragmentRoot packageFragmentRoot = packageFragmentRoots[i];
IJavaElement[] fragments = packageFragmentRoot.getChildren();
for (int j = 0; j < fragments.length; j++)
{
IPackageFragment fragment = (IPackageFragment) fragments[j];
IJavaElement[] javaElements = fragment.getChildren();
for (int k = 0; k < javaElements.length; k++)
{
IJavaElement javaElement = javaElements[k];
if (javaElement.getElementType() == IJavaElement.COMPILATION_UNIT)
{
units.add((ICompilationUnit) javaElement);
}
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return units;
}
【问题讨论】:
-
字符串名称是什么意思 - 只是 xxx.java 还是您有完整的包名(或路径)?
-
在一个项目中可能有很多名为
Foo.java的文件位于不同的包中,那么您如何确定是哪一个? -
我相信每个源文件夹 (
IPackageFragmentRoot) 中只有一个唯一的Foo.java,因此我可能需要遍历IJavaProject中的每个源文件夹或返回所有匹配的实例。
标签: java eclipse eclipse-plugin