2010-09-18 33 views
1

我正在編寫一個Eclipse插件,我想在該項目中讀取文件並對其執行操作。 例如,該文件位於:Project testplugin和path:com/flow/FlowMain.java 我想以編程方式讀取此文件並在其中添加一些代碼。 我試圖是:在Eclipse插件中獲取文件位置

字符串鹼= Platform.getBundle(config.getPluginId())getEntry( 「/」)的toString(); String relativeUri =「com/flow/FlowMain.java」; 文件f =新文件(base + relativeUri);

這顯然失敗,因爲「基地+ relativeUri」的值返回: 項://1079.fwk5184781/com/flow/FlowMain.java

那麼,如何去獲得完整的文件從插件內的路徑?

+2

的[檢索從文件夾內的工作區中的文件]可能重複(http://stackoverflow.com/questions/2148821/retrieve-一個文件夾在工作區內) – 2010-09-18 14:41:51

+0

是的,您需要第二種從工作區根目錄遍歷的方法,而不是從包中進行遍歷。 – zvikico 2010-09-19 07:18:44

回答

3

'entry'是一個由equinox定義的協議,所以你可以使用org.eclipse.core.runtime.FileLocator.toFileURL(URL)來獲得真正的路徑。

+0

從Fabian建議的帖子中,我試圖找到根工作區並找到實際的文件。我得到一個NPE這樣做。根工作區本身似乎是空的。當我嘗試使用System.out.println(resourceInRuntimeWorkspace.getName())時,我得到了NPE。有一點要說明的是,我正在運行此代碼「作爲日食應用程序」 – Ved 2010-09-19 13:44:55

+0

我面對的另一個問題是,該文件駐留在項目文件夾中,因此路徑應該是「projectname」+/com/flow/FlowMain.java。現在我如何獲取當前項目的名稱並將其追加到路徑中?有沒有辦法從IWorkspaceRoot中獲取它? – Ved 2010-09-19 14:04:43

+0

您必須注意一件事,通過Platform.getBundle(config.getPluginId())獲取的包實例是運行目標平臺中的包。 例如,它是您的工作區中的插件項目。在eclipse中執行代碼時,您可以獲取項目文件夾的絕對路徑。然而,它是目標平臺中的jar文件,比如捆綁包「org.eclipse.core.runtime」。當您嘗試獲取其位置時,該jar將被提取到osgi數據文件夾。 – Kane 2010-09-20 02:19:54

0

使用以下代碼來獲取插件路徑:

String workSpaceRootpath=this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()+Relativepath of a file;