2009-10-26 27 views
8

Estoy tratando de crear un nuevo archivo en un plugin de eclipse. No es necesariamente un archivo Java, puede ser un archivo HTML, por ejemplo.Plugin de Eclipse: crea un nuevo archivo

En este momento estoy haciendo esto:

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

El archivo se crea, pero el problema es que no quede reconocida como cualquier tipo; No puedo abrirlo en ningún editor interno. Eso es hasta que reinicie Eclipse (actualizar o cerrar y luego abrir el proyecto no ayuda). Después de un reinicio, el archivo es perfectamente utilizable y se abre en el editor predeterminado correcto para su tipo.

¿Hay algún método que necesite llamar para obtener el archivo fuera de ese estado de "limbo"?

Respuesta

7

Eso thread menciona la llamada createFile, sino que también se refiere a un FileEditorInput para abrirlo:

En lugar de java.io.File, se debe utilizar IFile.create(..) o IFile.createLink(..). Necesitará obtener primero un identificador IFile del proyecto utilizando IProject.getFile(..), luego cree el archivo utilizando ese identificador.
Una vez que se haya creado el archivo, puede crear FileEditorInput y usar IWorkbenchPage.openEditor(..) para abrir el archivo en un editor.

Ahora, ¿ese tipo de método (de este AbstractExampleInstallerWizard) sería de alguna ayuda en este caso?

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

Ver también este SDOModelWizard abrir un editor en un nuevo 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

De hecho, al abrir el archivo en el editor correcta resolvieron el problema. ¡Gracias! – erwan