2009-10-26 3 views
8

J'essaie de créer un nouveau fichier dans un plugin eclipse. Ce n'est pas forcément un fichier Java, ce peut être un fichier HTML par exemple.Plugin Eclipse: créer un nouveau fichier

En ce moment je fais ceci:

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

Le fichier est créé, mais le problème est qu'il ne soit pas reconnu comme tout type; Je ne peux pas l'ouvrir dans un éditeur interne. C'est jusqu'à ce que je redémarre Eclipse (rafraîchir ou fermer puis ouvrir le projet n'aide pas). Après un redémarrage, le fichier est parfaitement utilisable et s'ouvre dans l'éditeur par défaut correct pour son type.

Y at-il une méthode que j'ai besoin d'appeler pour obtenir le fichier en dehors de cet état "limbo"?

Répondre

7

Ce thread mentionne le createFile appel, mais fait également référence à un FileEditorInput pour l'ouvrir:

Au lieu de java.io.File, vous devez utiliser IFile.create(..) ou IFile.createLink(..). Vous devrez d'abord obtenir un handle IFile du projet en utilisant IProject.getFile(..) en premier, puis créez le fichier en utilisant ce handle.
Une fois le fichier créé, vous pouvez en créer FileEditorInput et utiliser IWorkbenchPage.openEditor(..) pour ouvrir le fichier dans un éditeur.

Maintenant, ce type de méthode (à partir de AbstractExampleInstallerWizard) serait-il utile dans ce cas?

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

Voir aussi ce SDOModelWizard l'ouverture d'un éditeur sur un nouveau 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

En effet, l'ouverture du fichier dans l'éditeur correct fait l'affaire. Je vous remercie! – erwan

Questions connexes