2009-10-26 174 views
8

我想在eclipse插件中創建一個新文件。它不一定是一個Java文件,例如它可以是一個HTML文件。Eclipse插件:創建一個新文件

現在我這樣做:

IProject project = ...; 
IFile file = project.getFile("/somepath/somefilename"); // such as file.exists() == false 
String contents = "Whatever"; 
InputStream source = new ByteArrayInputStream(contents.getBytes()); 
file.create(source, false, null); 

文件被創建,但問題是,它不會被認爲是任何類型的;我無法在任何內部編輯器中打開它。直到我重新啓動Eclipse(刷新或關閉,然後打開項目沒有幫助)。重新啓動後,該文件完全可用,並在其類型的正確默認編輯器中打開。

是否有任何方法需要調用以使文件在「limbo」狀態之外?

回答

7

thread確實提到了createFile電話,但也指FileEditorInput打開它:

相反的java.io.File,你應該使用IFile.create(..)IFile.createLink(..)。您需要先使用IProject.getFile(..)從項目中獲得IFile句柄,然後使用該句柄創建該文件。
創建文件後,您可以從中創建FileEditorInput,並使用IWorkbenchPage.openEditor(..)在編輯器中打開該文件。

現在,這種方法(從這個AbstractExampleInstallerWizard)在這種情況下有什麼幫助嗎?

protected void openEditor(IFile file, String editorID) throws PartInitException 
    { 
    IEditorRegistry editorRegistry = getWorkbench().getEditorRegistry(); 
    if (editorID == null || editorRegistry.findEditor(editorID) == null) 
    { 
     editorID = getWorkbench().getEditorRegistry().getDefaultEditor(file.getFullPath().toString()).getId(); 
    } 

    IWorkbenchPage page = getWorkbench().getActiveWorkbenchWindow().getActivePage(); 
    page.openEditor(new FileEditorInput(file), editorID, true, IWorkbenchPage.MATCH_ID); 
    } 

參見本SDOModelWizard上了一個新IFile打開一個編輯:

// Open an editor on the new file. 
    // 
    try 
    { 
    page.openEditor 
     (new FileEditorInput(modelFile), 
     workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId()); 
    } 
    catch (PartInitException exception) 
    { 
    MessageDialog.openError(workbenchWindow.getShell(), SDOEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage()); 
    return false; 
    } 
+0

的確,打開文件在正確的編輯器沒有的伎倆。謝謝! – erwan 2009-10-26 16:15:25