官方文档
https://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/virtual_file.html
Github
https://github.com/kungyutucheng/my_gradle_plugin
运行环境
macOS 10.14.5
IntelliJ idea 2019.2.4
定义
Virtual Files
是VFS
中的一种代表性文件类型,大多数情况下,Virtual File
就是本地系统的一个文件
获取方法
-
e.getData(PlatformDataKeys.VIRTUAL_FILE)
,如果是多选,使用e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY)
LocalFileSystem.getInstance().findFileByIoFile()
-
psiFile.getVirtualFile()
,如果PSI FILE仅存在内存中,则返回空 FileDocumentManager.getInstance().getFile()
允许操作
典型的文件操作,比如浏览文件系统、获取文件内容、重命名、移动、删除等等,递归遍历需要使用以下方法来避免由于递归符号引用导致的死循环:
VfsUtilCore.iterateChildrenRecursively
刷新操作
VirtualFileManager.getInstance().refresh()
或者
VirtualFile.refresh()
更新通知机制
Virtual File刷新的时候可以通过以下方法监听到:
project.getMessageBus().connect().subscribe(VirtualFileManager.VFS_CHANGES, new BulkFileListener() {
@Override
public void after(@NotNull List<? extends VFileEvent> events) {
// handle the events
}
});
分析和操作工具
VfsUtil
VfsUtilCore
-
ProjectLocator
:可以用来获取包含给定的Virtual File
的工程