美文网首页Intellij IDEA我用 Linux
IntelliJ Platform 插件开发文档翻译 - 虚拟文

IntelliJ Platform 插件开发文档翻译 - 虚拟文

作者: 斯科特安 | 来源:发表于2016-08-30 23:24 被阅读569次

    原文: Virtual Files

    虚拟文件 com.intellij.openapi.vfs.VirtualFileIntelliJ Platform’s 虚拟文件系统的文件. 大多数情况,我们说一个文件是指本地文件系统的文件. 在IntelliJ Platform中,由于平台灵活地支持多类文件系统,所以虚拟文件同时也可以指代JAR包里的类文件、版本控制系统中历史版本的文件等等。

    VFS级别的文件只支持二进制内容。你可以通过流(stream)的方式读写VirtualFile的二进制数据,编码、行分隔符这类概念只被更高的系统级别支持。

    如何获取一个虚拟文件

    • 从action获得: e.getData(PlatformDataKeys.VIRTUAL_FILE).
      如果你选择了多个文件,使用: e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY).
    • 使用本地文件系统上的路径: LocalFileSystem.getInstance().findFileByIoFile()
    • 从PSI文件 : psiFile.getVirtualFile() (如果PSI文件只存在于内存中,返回null)
    • 从Document中: FileDocumentManager.getInstance().getFile()

    我可以用它做什么?

    支持所有的传统文件操作,比如 遍历整个文件系统、获取文件内容、重命名、移动、删除。遍历操作应该使用VfsUtilCore.iterateChildrenRecursively来避免符号链接造成的无限循环。

    虚拟文件系统如何建立?

    VFS由系统在项目根目录自上而下地扫描并建立。新文件由VFS的refreshes操作检测。这一操作由VirtualFileManager.getInstance().refresh()VirtualFile.refresh()方法触发。也会在文件系统watchers接收到文件系统变化的通知时触发(Windows和Mac操作系统上存在)。

    作为一个插件开发者,当你需要访问由外部工具通过IntelliJ Platform 的API新创建的文件时,你需要先执行VFS的refresh操作。

    一个虚拟文件的生命周期?

    硬盘上的一个文件对应的VirtualFile实例有着喝IDEA进程相同的生命周期。同一个文件可能有多个实例,这些实例都可被回收。这个文件本体是用户数据的载体,用户数据同个这个文件在多个实例间共享数据。如果文件本体删除,它对应的多个VirtualFile都会失效(isValid()方法反悔false,对它的操作会抛出异常)。

    如何创建一个虚拟文件?

    通常你不需要这么做。按照规则,文件通常使用PSI API或常规的java.io.File API创建。

    如果你想通过VFS创建文件,你可以使用VirtualFile.createChildData()方法创建一个VirtualFile实例,然后使用VirtualFile.setBinaryContent()方法往文件里写数据。

    如何获取VFS改变的通知?

    VirtualFileManager.addVirtualFileListener() 方法可以接收到VFS的所有改变行为。

    如何扩展VFS?

    实现一个第三方的文件系统(比如FTP文件系统),需要实现 VirtualFileSystem 接口(大多数时候也要提供 VirtualFile的实现),并且把你的实现注册成一个application component.。

    若要把这些这些文件操作应用到本地文件系统上(比如,你再开发一个版本控制系统,需要自定义重命名/移动操作),你应该实现LocalFileOperationsHandler接口,并通过LocalFileSystem.registerAuxiliaryFileOperationsHandler方法注册它。

    VFS的工作细则?

    IntelliJ Platform Virtual File System 查看VFS架构和使用指引的更多细节。

    相关文章

      网友评论

        本文标题:IntelliJ Platform 插件开发文档翻译 - 虚拟文

        本文链接:https://www.haomeiwen.com/subject/wulqettx.html