2009-10-26 13 views
8

Próbuję utworzyć nowy plik w wtyczce Zaćmienie. Nie musi to być plik Java, może to być na przykład plik HTML.Wtyczka Eclipse: utwórz nowy plik

Teraz robię to:

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

Plik zostanie utworzony, ale problemem jest to, że nie zostanie rozpoznany jako wszelkiego rodzaju; Nie mogę otworzyć go w żadnym wewnętrznym edytorze. Dopóki nie zrestartuję Eclipse (odśwież lub zamknij, otwórz projekt nie pomoże). Po ponownym uruchomieniu plik jest doskonale użyteczny i otwiera się w odpowiednim edytorze domyślnym dla jego typu.

Czy jest jakaś metoda, którą należy wywołać w celu pobrania pliku poza stan "limbo"?

Odpowiedz

7

To thread wspomina rozmowę createFile, ale także odnosi się do FileEditorInput, aby go otworzyć:

Zamiast java.io.File, należy użyć IFile.create(..) lub IFile.createLink(..). Najpierw musisz pobrać uchwyt IFile przy użyciu IProject.getFile(..), a następnie utwórz plik przy użyciu tego uchwytu.
Po utworzeniu pliku można utworzyć z niego FileEditorInput i użyć pliku IWorkbenchPage.openEditor(..), aby otworzyć plik w edytorze.

Czy taka metoda (z tego AbstractExampleInstallerWizard) byłaby w tym przypadku przydatna?

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

Zobacz także ten SDOModelWizard otwarciu edytora na nowym 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

Rzeczywiście, otwierając plik w odpowiednim edytorze załatwiło sprawę. Dziękuję Ci! – erwan