Плагин Eclipse: создайте новый файл

Я пытаюсь создать новый файл в плагине eclipse. Это не обязательно файл Java, например, это может быть файл HTML.

Прямо сейчас я делаю это:

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 (обновить или закрыть, а затем открыть проект не помогает). После перезапуска файл вполне пригоден для использования и открывается в правильном редакторе по умолчанию для его типа.

Есть ли какой-либо метод, который мне нужно вызвать, чтобы получить файл за пределами этого «подвешенного» состояния?


person erwan    schedule 26.10.2009    source источник


Ответы (1)


В этом потоке упоминается вызов createFile, но также FileEditorInput, чтобы открыть его:

Вместо java.io.File следует использовать IFile.create(..) или IFile.createLink(..). Сначала вам нужно будет получить дескриптор IFile из проекта, используя IProject.getFile(..), а затем создать файл, используя этот дескриптор.
После создания файла вы можете создать из него 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;
  }
person VonC    schedule 26.10.2009
comment
Действительно, открытие файла в правильном редакторе помогло. Спасибо! - person erwan; 26.10.2009