2010-08-04 66 views

回答

6

IProject接口擴展有哪幾種findMember方法​​。在使用getType檢查其類型後,您可以獲得一個IResource,該IResource可以輸出到IFile。通過這些接口,它們被正確記錄。

+0

findMembers沒有爲我工作.... 但我試過Icontainer.members(),它的工作.. 感謝您的幫助... – 2010-08-04 14:50:45

+3

我有幾年的Eclipse插件開發經驗。如果有一個建議,我可以給你它是:使用源。開發您的代碼瀏覽和閱讀技能,並確保我始終可用的來源。 – zvikico 2010-08-04 15:08:20

+0

請注意'IProject'不關心類路徑。 而'members()'函數將只返回直接的子對象。 所以你得到的不是類路徑中的文件,而是直接在項目根目錄中。 – Stroboskop 2011-10-11 13:39:52

3

我面臨同樣的問題,這是短我做了什麼:

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; 
} 

它看起來很醜陋,也許還有一個更直接的方法。但它的工作。

如果您需要使用類路徑,則必須使用IJavaProject,並且分段工作的方式可防止直接搜索文件路徑,因爲它會採用「。」。 (句點)是一個java包分隔符。所以我想你必須先得到正確的文件夾,然後是文件。

+0

這隻適用於java項目!如果你有pde(插件)或其他項目,JavaCore.create(project)會創建一個不存在的項目。 – Nachtgold 2012-10-26 09:26:57