Plugin Eclipse: créer un nouveau fichier
-
06-07-2019 - |
Question
J'essaie de créer un nouveau fichier dans un plugin eclipse. Ce n'est pas nécessairement un fichier Java, ce peut être un fichier HTML par exemple.
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 n’est pas reconnu comme étant de type quelconque; Je ne peux pas l'ouvrir dans aucun éditeur interne. C'est jusqu'à ce que je redémarre Eclipse (actualiser ou fermer puis ouvrir le projet ne aide pas). Après un redémarrage, le fichier est parfaitement utilisable et s’ouvre dans l’éditeur par défaut adapté à son type.
Existe-t-il une méthode que je dois appeler pour extraire le fichier de ce "limbo"? état?
La solution
Ce fil mentionne le createFile
, mais fait également référence à un FileEditorInput
pour l'ouvrir:
Au lieu de
java.io.File
, vous devez utiliserIFile.create (..)
ouIFile.createLink (..)
. Vous devrez d'abord obtenir un descripteurIFile
à partir du projet, à l'aide deIProject.getFile (..)
, puis créer le fichier à l'aide de ce descripteur.
Une fois le fichier créé, vous pouvez en créerFileEditorInput
et utiliserIWorkbenchPage.openEditor (..)
pour ouvrir le fichier dans un éditeur.
Maintenant, est-ce que ce genre de méthode (à partir de cela AbstractExampleInstallerWizard
>) vous aider 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 ceci SDOModelWizard
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;
}