导包:
<!--Xmind -->
<dependency>
<groupId>com.github.eljah</groupId>
<artifactId>xmindjbehaveplugin</artifactId>
<version>0.8</version>
</dependency>
首先正常写法都是这样的
@Test
public void Xmind(){
//初始化builder
IWorkbookBuilder builder = Core.getWorkbookBuilder();
IWorkbook workbook = null;
try {
//打开XMind文件
workbook = builder.loadFromPath("C:\\Users\\lgz\\Desktop\\money.xmind");
} catch (IOException | CoreException e) {
e.printStackTrace();
}
//获取主Sheet
ISheet defSheet = workbook.getPrimarySheet();//获取根Topic
ITopic rootTopic = defSheet.getRootTopic();
Queue<ITopic> queue = new LinkedList<>();
System.out.println(rootTopic.getTitleText());
}
当运行的时候就会报错:Storage is null
当你打开源码去看的时候,就会发现,貌似是源码就是个坑,看下面调用链。
首先是接口的实现方法是传了一个空的IStorage,记住他是null,接着往下看。debug进去
走这个方法,然后一步一步进去
debug进去发现,最终自己传了一个null,自己抛了个异常。我感觉很坑,是自己的姿势不对吗?希望大佬解答!!!
解决方案
@Test
public void Xmind(){
//初始化builder
IWorkbookBuilder builder = Core.getWorkbookBuilder();
IWorkbook workbook = null;
try {
//new一个Storage(),Istorage是一个接口,new一个他的实现类即可,想研究实现类的小伙伴自行研究。第三个参数传一个null即可。感觉只传路径的接口就是个假接口(那个只传file的接口也是假的)
workbook = builder.loadFromPath("C:\\Users\\WEIMOB\\Desktop\\money.xmind",new ByteArrayStorage(), null);
} catch (IOException | CoreException e) {
e.printStackTrace();
}
//获取主Sheet
ISheet defSheet = workbook.getPrimarySheet();//获取根Topic
ITopic rootTopic = defSheet.getRootTopic();
Queue<ITopic> queue = new LinkedList<>();
System.out.println(rootTopic.getTitleText());
}
如果出现下面这种问题
是因为下载的版本是XMind2020的事情,改为XMind8就可以啦!!!当然改个后缀名(zip)打开看他们的结构也不一样,小伙伴可以试一下。
XMind8的结构是:
XMind2020的结构是