繁体   English   中英

如何以编程方式在IntelliJ idea中打开特定文件

[英]How to open particular file in IntelliJ idea programatically

我正在以IntelliJ想法开发Android Studio插件,我需要在其中打开特定的Java文件。 我能够打开selectedTextEditor,使用Editor,Document和VirtualFile API以及以下代码进行编辑和保存。

 @Override
    public void actionPerformed(AnActionEvent e) {
        final Project project = e.getProject();
        if (project == null) {
            return;
        }
        final Editor edit = e.getRequiredData(CommonDataKeys.EDITOR);
        System.out.println("Edit=======>>>>>>>>>>>>>>>>>>>>" + edit.getDocument());

        MANIFEST_PATH = project.toString() + "AndroidManifest.xml";

        System.out.println("project Path=>>>>>>" + project.toString());

        Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();

        FileEditor editors[] = FileEditorManager.getInstance(project).getAllEditors();
        if (editor == null) {
            return;
        }
        System.out.println("editor Path=>>>>>>" + editor.toString());
        for (int index = 0; index < editors.length; index++) {
            System.out.println("editors Path=>>>>>>" + editors[index].toString());
        }

        final Document document = editor.getDocument();
        System.out.println("document Path=>>>>>>" + document.toString());
        VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
        if (virtualFile == null) {
            return;
        }
        System.out.println("Virtual Path=>>>>>>" + virtualFile.toString());
        final String contents;
        try {
            System.out.println("Virtual getpath=>" + virtualFile.getPath());
            BufferedReader br = new BufferedReader(new FileReader(virtualFile.getPath()));
            String currentLine;
            StringBuilder stringBuilder = new StringBuilder();
            StringBuilder sb = new StringBuilder();
            while ((currentLine = br.readLine()) != null) {
                stringBuilder.append(currentLine);
                stringBuilder.append("\n");
                if (currentLine.contains("package")) {
                    stringBuilder.append(ManifestGenerator.generateGCMPermission());
                } else if (currentLine.contains("android:icon")) {
                    stringBuilder.append(ManifestGenerator.generateMetaData());
                    stringBuilder.append(ManifestGenerator.generateService());
                    stringBuilder.append(ManifestGenerator.generateReceiver());
                }
            }
            contents = stringBuilder.toString();
        } catch (IOException e1) {
            return;
        }

        final Runnable readRunner = new Runnable() {
            @Override
            public void run() {
                document.setText(contents);
            }
        };
        ApplicationManager.getApplication().

                invokeLater(new Runnable() {
                                @Override
                                public void run() {
                                    CommandProcessor.getInstance().executeCommand(project, new Runnable() {
                                        @Override
                                        public void run() {
                                            ApplicationManager.getApplication().runWriteAction(readRunner);
                                        }
                                    }, "DiskRead", null);
                                }
                            }

                );
    }

但是我想打开一个特定文件(例如abc.java),没有找到实现此目的的任何API。 只是想知道,如果不打开,我们如何打开/保存/编辑特定文件/编辑器。

要在编辑器中打开文件,请使用new OpenFileDescriptor(project, virtualFile).navigate()

您可能需要修复代码中的其他一些问题:

  • 除调试外,请勿在IntelliJ IDEA类上使用toString()方法。 对于通过toString()执行的所有操作都有适当的API。
  • 您不需要两种不同的方式来获取编辑器。 第一个( e.getRequiredData() )是正确的。
  • 不要使用BufferedReader从磁盘读取文件的文本。 请改用Document.getText()
  • 您不需要invokeLater()调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM