[英]Eclipse API: Get IFile or fully-qualified name from IJavaProject using only the file's name string
[英]Eclipse API: How to get IFile from an IProject using only the file name?
如標題所述,我沒有包裹名稱或信息。 我有一個IProject句柄和一個表示IFile名稱的String。
IFile是一個.java
類文件,IProject是一個Java項目。 理想情況下,我想在不假設它們是Java文件/項目的情況下這樣做 - 但我的目的是假設是可行的。 有什么建議么?
如果要以遞歸方式從IProject獲取文件,可以使用IProject#members。
public IFile findFileRecursively(IContainer container, String name) throws CoreException {
for (IResource r : container.members()) {
if (r instanceof IContainer) {
IFile file = findFileRecursively((IContainer) r, name);
if(file != null) {
return file;
}
} else if (r instanceof IFile && r.getName().equals(name)) {
return (IFile) r;
}
}
return null;
}
您可以按如下方式調用該方法。
IFile file = findFileRecursively(project, "Foo.java");
如果您要查找的文件不能遞歸調用,您可以使用的IProject#findMembers(字符串)。
如果你要堅持使用資源,你應該使用IResource#accept(IResourceProxyVisitor)
- 這是通過資源樹最輕量級的方式。 您的訪問者將能夠向給定的IResourceProxy
實例詢問項目中每個資源的類型和名稱,然后在代理上的匹配項既是文件又具有正確名稱時請求完整路徑。
如果您願意通過JDT API,它的SearchEngine就是為這種東西而構建的,它有專門用於查找類型名稱的方法。 在實現類中設置一些斷點,並嘗試從運行時工作台的UI中進行一些Java搜索,以更好地了解它的設置方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.