簡體   English   中英

Eclipse API:如何僅使用文件名從IProject獲取IFile?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM