File ioFile = new File("./io.java")
VritualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(ioFile)
virtualFile.refresh(false, true)
複製代碼
FileChooserDescriptor singleFileDescriptor = FileChooserDescriptorFactory.createSingleFileDescriptor();
VirtualFile virtualFile = FileChooser.chooseFile(singleFileDescriptor, project, null);
複製代碼
VirtualFileManager.getInstance().findFileByUrl("xxx");
VirtualFileManager.getInstance().refreshAndFindFileByUrl("xxx");
複製代碼
和Android同樣,Intellij Platform不容許直接在主線程進行實時的文件寫入,須要經過一個異步任務進行。java
WriteCommandAction.runWriteCommandAction(project, new Runnable() {
@Override
public void run() {
// virtualFile.getInputStream() / virtualFile.getOutputStream()
}
});
複製代碼
ApplicationManager.getApplication().invokeLater(new Runnable(){
...
})
複製代碼
PSI(Program Structure Interface)是Intellij Platform中一個很是重要的概念,在IDE所管理的Project中,每一個目錄,Package,源代碼和資源文件都會被抽象成相應的PSI對象。git
PsiDirectory、PsiJavaFile和XmlFilegithub
//建立目錄
PsiDirectory baseDir = PsiDirectoryFactory.getInstance(project).createDirectory(project.getBaseDir());
//建立Java文件
PsiJavaFile psiFile = (PsiJavaFile) PsiFileFactory.getInstance(project).createFileFromText("", StdFileTypes.JAVA, "");
//建立Xml文件
XmlFile psiFile = (XmlFile) PsiFileFactory.getInstance(project).createFileFromText("", StdFileTypes.XML, "");
複製代碼
和寫入VirtualFile同樣,讀寫操做都須要在WriteCommandAction異步線程中進行。bash
XmlDocument document = xmlFile.getDocument();
if (document != null && document.getRootTag() != null) {
XmlTag rootTag = document.getRootTag();
rootTag.getAttribute(attrName).setValue(attrValue);//set value for exists attr.
rootTag.setAttribute(name,value);//add a new attr and setting value
}
複製代碼
// 方法一:(全類名)
JavaPsiFacade.getInstance(mFile.getProject()).findClass(qualifiedName,GlobalSearchScope.alScope(mFile.getProject()));
// 方法二: (全類名)
FilenameIndex.getFilesByName()
// 方法三: (短類名)
PsiShortNamesCache.getInstance().getClassesByName()
複製代碼
PsiClass clazz = JavaDirectoryService.getInstance().createClass(subDir, className)
複製代碼
// 建立Class元素生成器
PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(mFile.getProject());
// 利用生成器建立對應的元素(每種元素都對應兩種生成方式)
elementFactory.createField() / elementFactory.createFieldFromText()
elementFactory.createMethod() / elementFactory.createMethodFromText()
elementFactory.createClass() / elementFactory.createClassFromText()
...
//將元素添加到class中
clazz.add(field)
複製代碼
respClass.getExtendsList().add(getReferenceClass(elementFactory, BaseModelStr));
複製代碼
// 添加
respClass.getModifierList().add(elementFactory.createKeyword("public"));
// 刪除
reqClass.getModifierList().getFirstChild().delete();
複製代碼
// VirtualFile 轉 PsiFile
PsiManager.getInstance(project).findFile(virtualFile);
// PsiFile 轉 VirtualFile
VirtualFile virtualFile = psiFile.getVirtualFile();
複製代碼
// 格式化代碼
CodeStyleManager.getInstance(project).reformat(psiClass);
// 用編輯器打開指定文件
FileEditorManager.getInstance(project).openTextEditor(new OpenFileDescriptor(project, virtualFile), true);
複製代碼
github倉庫地址服務器