Eclipse插件:获取当前打开文件的代码

6

我如何将Eclipse中当前打开文件的代码以StringString[]形式返回?我需要这个来制作一个插件。

假设我有以下代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

如果我打开HelloWorld.java文件,如何将该代码以String[]的形式返回? String[]包含以下内容:
  • "public class HelloWorld {"
  • "public static void main(String[] args) {"
  • "System.out.println("Hello, world!");"
  • "}"
  • "}"
1个回答

13

要获取当前编辑的文件内容,您可以像这样做:

IWorkbenchPart workbenchPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart(); 
IFile file = (IFile) workbenchPart.getSite().getPage().getActiveEditor().getEditorInput().getAdapter(IFile.class);
if (file == null) throw new FileNotFoundException();
String content = IOUtils.toString(file.getContents(), file.getCharset());

1
The method getAdapter(Class<IFile>) is undefined for the type IEditorInput - nrubin29
2
也没有 IFile 和 IOUtils 类。 - nrubin29
2
IEditorInput 实现了 IAdaptable 接口,因此应该有 getAdapter() 方法。 IFile 位于 org.eclipse.core.resources 包中。 IOUtils 是 Apache Common 库中的一个类。如果您喜欢,可以使用其他方法将 InputStream 转换为 String。您正在使用/针对哪个版本的 Eclipse? - Serge Farny
要添加"org.eclipse.core.resources",仅导入是不够的。您必须在插件MANIFEST.MF中将其添加为依赖项。 - Serge Farny
没有什么需要下载的,你已经拥有它了(这是Eclipse的一个基本组件)。将其添加到MANIFEST.MF的Require-Bundle列表中。(此代码片段适用于Indigo版本。) - Serge Farny
2
这段代码确实获取了文件内容——这也是所需求的。在某些情况下,人们可能需要编辑器的内容,但那将是另一个问题。在这两种情况下,“code”都被认为是“text”,但是通常情况下,文件或编辑器不一定有文本。 - Tom Blodget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接